Ejercicio: Conexión a la base de datos e incorporación de datos de ejemplo
Antes de conectar la base de datos a la aplicación, queremos confirmar que podemos conectarnos a ella, agregar una tabla básica y trabajar con datos de ejemplo.
Mantenemos la infraestructura, las actualizaciones de software y las revisiones para Azure SQL Database. Puede tratar la instancia de Azure SQL Database como haría con cualquier otra instalación de SQL Server. Por ejemplo, puede usar Visual Studio, SQL Server Management Studio, Azure Data Studio u otras herramientas para administrar la instancia de Azure SQL Database.
Cómo acceder a la base de datos y conectarla a la aplicación es decisión suya. Para obtener algo de experiencia trabajando con la base de datos, conectémoslo directamente a ella desde el portal, crear una tabla y ejecutar algunas operaciones CRUD básicas. Aquí aprenderá:
- Qué es Cloud Shell y cómo se accede desde el portal.
- Cómo acceder a información sobre la base de datos desde la CLI de Azure, incluidas las cadenas de conexión.
- Cómo conectarse a la base de datos con
sqlcmd
. - Cómo inicializar la base de datos con una tabla básica y algunos datos de ejemplo.
¿Qué es Azure Cloud Shell?
Azure Cloud Shell es una experiencia de shell basado en el explorador para administrar y desarrollar recursos de Azure. Piense en Cloud Shell como una consola interactiva que se ejecuta en la nube.
En segundo plano, Cloud Shell se ejecuta en Linux. Pero en función de si prefiere un entorno de Linux o Windows, puede elegir entre dos experiencias: Bash y PowerShell.
Cloud Shell es accesible desde cualquier lugar. Además del portal, también puede acceder a Cloud Shell desde shell.azure.com, Azure Mobile App o Visual Studio Code.
Cloud Shell incluye herramientas y editores de texto populares. Esta es una breve descripción de las utilidades az
, jq
y sqlcmd
, que son tres herramientas que usará en este ejercicio.
az
también se conoce como la CLI de Azure. Es la interfaz de la línea de comandos para trabajar con recursos de Azure. Usará esta interfaz para obtener información sobre la base de datos, incluida la cadena de conexión.jq
es un analizador JSON de la línea de comandos. Canalizará la salida de los comandosaz
a esta herramienta para extraer campos importantes de la salida JSON.sqlcmd
permite ejecutar instrucciones en SQL Server. Usarásqlcmd
para crear una sesión interactiva con su instancia de Azure SQL Database.
Obtención de información sobre la instancia de Azure SQL Database
Antes de conectarnos a la base de datos, se recomienda comprobar que existe y que está en línea.
Aquí usamos la utilidad az
para enumerar las bases de datos y mostrar cierta información sobre la base de datos Logistics, incluido su estado y tamaño máximo.
Los comandos
az
que se van a ejecutar requieren el nombre del grupo de recursos y el nombre del servidor lógico de Azure SQL. Para guardar las pulsaciones de teclas y no tener que escribirlos, ejecute el comandoazure configure
para especificarlos como valores predeterminados.Reemplace
[server-name]
por el nombre del servidor lógico de Azure SQL que creó y[resource-group]
por el grupo de recursos que usó para el servidor.az configure --defaults group=[resource-group] sql-server=[server-name]
Nota:
Dependiendo del panel en el que estemos en el portal, el nombre del servidor SQL se puede mostrar como FQDN (p. ej., nombreDeServidor.database.windows.net). pero en este comando solo necesitamos el nombre lógico sin el sufijo .database.windows.net.
Ejecute el siguiente comando
az sql db list
para mostrar todas las bases de datos en el servidor lógico de Azure SQL:az sql db list
Veremos un gran bloque de JSON como salida.
Como solo queremos ver los nombres de la base de datos ejecute el comando de nuevo. Pero esta vez canalice la salida a
jq
para mostrar solo los campos de nombre.az sql db list | jq '[.[] | {name: .name}]'
Debería obtener esta salida:
[ { "name": "Logistics" }, { "name": "master" } ]
Logistics
es la base de datos. Al igual que SQL Server, la base de datos del sistemamaster
incluye los metadatos del servidor, como inicios de sesión y los valores de configuración del sistema.Ejecute el siguiente comando
az sql db show
para obtener detalles sobre la base de datosLogistics
:az sql db show --name Logistics
Igual que antes, verá un gran bloque de JSON como salida.
Ejecute por segunda vez el comando. Esta vez, canalice la salida a
jq
para limitarla solo al nombre, tamaño máximo y estado de la base de datos Logistics.az sql db show --name Logistics | jq '{name: .name, maxSizeBytes: .maxSizeBytes, status: .status}'
Verá que la base de datos está en línea y la cantidad máxima de datos que puede almacenar esta.
{ "name": "Logistics", "maxSizeBytes": 2147483648, "status": "Online" }
Conexión a la base de datos
Ahora que conoce un poco sobre la base de datos, vamos a conectarnos a ella mediante sqlcmd
, crearemos una tabla que contiene información sobre conductores de transporte y realizaremos algunas operaciones CRUD básicas.
Recuerde que CRUD es el acrónimo de creación, lectura, actualización y eliminación, por sus siglas en inglés. Estos términos hacen referencia a las operaciones que se realizan en los datos de las tablas, y son las cuatro operaciones básicas que se necesitan en la aplicación. Este es un buen momento para comprobar que puede llevarlas a cabo.
Ejecute el siguiente comando
az sql db show-connection-string
para llevar la cadena de conexión a la base de datosLogistics
en un formato quesqlcmd
puede usar:az sql db show-connection-string --client sqlcmd --name Logistics
El resultado será similar al ejemplo siguiente. Copie esta salida para usarla en el paso siguiente.
"sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U <username> -P <password> -N -l 30"
Ejecute la instrucción
sqlcmd
de la salida del paso anterior para crear una sesión interactiva. Quite las comillas circundantes y reemplace<username>
y<password>
por el nombre de usuario y la contraseña que especificó al crear la base de datos. Este es un ejemplo:sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
Sugerencia
Coloque la contraseña entre comillas simples para que "&" y los demás caracteres especiales no se interpreten como instrucciones de procesamiento.
Importante
Es posible que vea un mensaje de error similar al ejemplo siguiente:
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server: Cannot open server 'contoso' requested by the login. Client with IP address 'nnn.nnn.nnn.nnn' is not allowed to access the server. To enable access, use the Windows Azure Management Portal or run sp_set_firewall_rule on the master database to create a firewall rule for this IP address or address range. It may take up to five minutes for this change to take effect.
Si este error se produce, tendrá que agregar otra regla de firewall para el cliente. Para ello, siga los pasos que se indican a continuación:
Inicie sesión en Azure Portal.
En la página Inicio de Azure, en Servicios de Azure, seleccione Todos los recursos. Aparece el panel Todos los recursos.
Busque y seleccione la base de datos. Se abre el panel Logistics de la base de datos SQL.
En la barra de menús superior, seleccione Establecer el firewall del servidor. Aparece el panel Redes.
En la sección Reglas de firewall, seleccione Agregar una regla de firewall. Aparece el panel Agregar una regla de firewall.
Especifique un nombre único en Nombre de la regla y escriba la dirección IP del mensaje de error en los campos IP inicial e IP final. Seleccione Aceptar.
Seleccione Guardar.
Vuelva a ejecutar la instrucción
sqlcmd
para iniciar la sesión interactivasqlcmd
. Debe tener un aspecto similar al siguiente ejemplo:
sqlcmd -S tcp:<server-name>.database.windows.net,1433 -d Logistics -U martina -P 'password1234$' -N -l 30
Ahora que ha iniciado la sesión de
sqlcmd
, los comandos restantes usan el lenguaje Transact-SQL o T-SQL.Sugerencia
Al ejecutar los comandos de T-SQL en este módulo, es posible que el elemento
GO
en la segunda línea no se copie en el símbolo del sistemasqlcmd
. Después de escribir la primera línea del comando, es posible que tenga que escribir en el comandoGO
. El comando T-SQL no se ejecutará sin él, así que asegúrese de ejecutar el comandoGO
.En la sesión
sqlcmd
, ejecute las siguientes instrucciones SQL para crear una tabla denominadaDrivers
:CREATE TABLE Drivers (DriverID int, LastName varchar(255), FirstName varchar(255), OriginCity varchar(255)); GO
La tabla contiene cuatro columnas: un identificador único, el apellido y el nombre del chofer y su ciudad de origen.
Ejecute las siguientes instrucciones T-SQL para comprobar que la tabla
Drivers
existe:SELECT name FROM sys.tables; GO
Debería obtener esta salida:
name -------------------------------------------------------------------------------------------------------------------------------- Drivers (1 rows affected)
Para probar la operación de creación, ejecute las siguientes instrucciones T-SQL para agregar una fila de ejemplo a la tabla:
INSERT INTO Drivers (DriverID, LastName, FirstName, OriginCity) VALUES (123, 'Zirne', 'Laura', 'Springfield'); GO
Esta salida indica que la operación se realizó correctamente:
(1 rows affected)
Para ejecutar la operación de lectura, ejecute las siguientes instrucciones T-SQL para enumerar las columnas
DriverID
yOriginCity
de todas las filas de la tabla:SELECT DriverID, OriginCity FROM Drivers; GO
Verá un resultado con
DriverID
yOriginCity
para la fila que creó en el paso anterior.DriverID OriginCity ----------- -------------------------- 123 Springfield (1 rows affected)
Para probar la operación de actualización, ejecute las siguientes instrucciones T-SQL para cambiar la ciudad de origen de "Springfield" a "Boston" para el conductor con
DriverID
de 123:UPDATE Drivers SET OriginCity='Boston' WHERE DriverID=123; GO
Ejecute las siguientes instrucciones T-SQL para volver a mostrar las columnas
DriverID
yOriginCity
:SELECT DriverID, OriginCity FROM Drivers; GO
Debería obtener esta salida. Fíjese en que
OriginCity
refleja la actualización a Boston.DriverID OriginCity ----------- -------------------------- 123 Boston (1 rows affected)
Por último, pruebe la operación de eliminación ejecutando las siguientes instrucciones T-SQL para eliminar el registro:
DELETE FROM Drivers WHERE DriverID=123; GO
(1 rows affected)
Ejecute las siguientes instrucciones T-SQL para comprobar que la tabla
Drivers
está vacía:SELECT COUNT(*) FROM Drivers; GO
Verá que la tabla no contiene ninguna fila.
----------- 0 (1 rows affected)
Ahora que ya tiene una idea general sobre cómo trabajar con Azure SQL Database desde Cloud Shell, puede obtener la cadena de conexión de su herramienta de administración de SQL favorita, independientemente de si es de SQL Server Management Studio, Visual Studio u otro.
Cloud Shell permite que sea más sencillo acceder a los recursos de Azure y trabajar con ellos. Como Cloud Shell se basa en el explorador, puede acceder desde Windows, macOS o Linux; básicamente cualquier sistema con un explorador web.
Obtuvo experiencia práctica ejecutando comandos de la CLI de Azure para obtener información sobre la instancia de Azure SQL Database. Como ventaja extra, ha practicado sus aptitudes de T-SQL.
En la siguiente unidad, recapitularemos este módulo y describiremos cómo desmontar nuestra base de datos.