Prepare su entorno local de Python Siga las instrucciones en Configuración de un entorno de desarrollo de Python .
Clone el repositorio de aplicaciones de muestra en su máquina local:
git clone https : // github . com / googleapis / python - spanner
Alternativamente, puede descargar la muestra como un archivo zip y extraerlo.
Cambie al directorio que contiene el código de muestra de Spanner:
cd python - spanner / samples / samples
Cree un entorno de Python aislado e instale las dependencias:
virtualenv env
source env / bin / activate
pip install - r requirements . txt
Crear una instancia Al usar Spanner por primera vez, debe crear una instancia, que consiste en una asignación de recursos que utilizan las bases de datos de Spanner. Al crear una instancia, se elige una configuración que determina dónde se almacenan los datos y el número de nodos a usar, lo que determina la cantidad de recursos de servicio y almacenamiento en la instancia.
Ejecute el siguiente comando para crear una instancia de Spanner en la región us-central1
con 1 nodo:
gcloud spanner instances create test-instance --config= regional-us-central1 \
--description= "Test Instance" --nodes= 1
Tenga en cuenta que esto crea una instancia con las siguientes características:
ID de instancia test-instance
Nombre para mostrar Test Instance
Configuración de instancia regional-us-central1
(las configuraciones regionales almacenan datos en una región, mientras que las configuraciones multirregionales distribuyen datos entre varias regiones. Para obtener más información, consulte Acerca de las instancias ). Cantidad de nodos de 1 ( node_count
corresponde a la cantidad de recursos de servicio y almacenamiento disponibles para las bases de datos en la instancia. Obtenga más información en Nodos y unidades de procesamiento ). Deberías ver:
Creating instance ... done .
Mirar archivos de muestra El repositorio de muestras contiene un ejemplo que muestra cómo utilizar Spanner con Python.
Revise el archivo snippets.py
, que muestra cómo usar Spanner. El código muestra cómo crear y usar una nueva base de datos. Los datos utilizan el esquema de ejemplo que se muestra en la página Esquema y modelo de datos . Crear una base de datos Google SQL
python snippets . py test - instance -- database - id example - db create_database
PostgreSQL
python pg_snippets . py test - instance -- database - id example - db create_database
Deberías ver:
Created database example - db on instance test - instance
El siguiente código crea una base de datos y dos tablas en la base de datos. Nota: Los ejemplos de código siguientes utilizan estas dos tablas. Si no ejecuta este código, cree las tablas utilizando Google Cloud Consola o la CLI de gcloud. Para más información, consulte el esquema de ejemplo . El siguiente paso es escribir datos en su base de datos.
Crear un cliente de base de datos Antes de poder realizar operaciones de lectura o escritura, debe crear un Client
. Un Client
es como una conexión a una base de datos: todas sus interacciones con Spanner deben pasar por Client
. Normalmente, se crea un Client
al iniciar la aplicación y luego se Client
para leer, escribir y ejecutar transacciones. El siguiente código muestra cómo crear un cliente. Lea más en la referencia Client
.
Escribir datos con DML Puede insertar datos utilizando el lenguaje de manipulación de datos (DML) en una transacción de lectura y escritura.
Utilice el método execute_update()
para ejecutar una declaración DML.
Ejecute la muestra utilizando el argumento insert_with_dml
.
python snippets . py test - instance -- database - id example - db insert_with_dml
Deberías ver:
4 record ( s ) inserted .
Nota: Hay límites para el tamaño de las confirmaciones. Consulta el límite de CRUD para más información.
Escribir datos con mutaciones También puedes insertar datos usando mutaciones .
Los datos se escriben mediante un objeto Batch
. Un objeto Batch
es un contenedor para operaciones de mutación. Una mutación representa una secuencia de inserciones, actualizaciones y eliminaciones que Spanner aplica automáticamente a diferentes filas y tablas de una base de datos Spanner.
El método insert()
de la clase Batch
añade una o más mutaciones de inserción al lote. Todas las mutaciones de un lote se aplican automáticamente.
Este código muestra cómo escribir los datos usando mutaciones:
Ejecute la muestra utilizando el argumento insert_data
.
python snippets . py test - instance -- database - id example - db insert_data
Deberías ver:
Inserted data .
Nota: Hay límites para el tamaño de las confirmaciones. Consulta el límite de CRUD para más información. Consultar datos mediante SQL Spanner admite una interfaz SQL para leer datos, a la que puedes acceder en la línea de comandos mediante la CLI de Google Cloud o mediante programación mediante la biblioteca cliente Spanner para Python.
En la línea de comandos Ejecute la siguiente declaración SQL para leer los valores de todas las columnas de la tabla Albums
:
gcloud spanner databases execute - sql example - db -- instance = test - instance \
-- sql = 'SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
El resultado debería ser:
SingerId AlbumId AlbumTitle
1 1 Total Junk
1 2 Go , Go , Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
Utilice la biblioteca cliente Spanner para Python Además de ejecutar una declaración SQL en la línea de comandos, puede emitir la misma declaración SQL mediante programación utilizando la biblioteca cliente Spanner para Python.
Utilice el método execute_sql()
de un objeto Snapshot
para ejecutar la consulta SQL. Para obtener un objeto Snapshot
, llame al método snapshot()
de la clase Database
en una instrucción with
.
A continuación se explica cómo emitir la consulta y acceder a los datos:
Ejecute la muestra utilizando el argumento query_data
.
python snippets . py test - instance -- database - id example - db query_data
Deberías ver el siguiente resultado:
SingerId : 2 , AlbumId : 2 , AlbumTitle : Forever Hold Your Peace
SingerId : 1 , AlbumId : 2 , AlbumTitle : Go , Go , Go
SingerId : 2 , AlbumId : 1 , AlbumTitle : Green
SingerId : 2 , AlbumId : 3 , AlbumTitle : Terrified
SingerId : 1 , AlbumId : 1 , AlbumTitle : Total Junk
Consulta utilizando un parámetro SQL Si su aplicación tiene una consulta que se ejecuta con frecuencia, puede mejorar su rendimiento parametrizándola. La consulta paramétrica resultante puede almacenarse en caché y reutilizarse, lo que reduce los costos de compilación. Para obtener más información, consulte Usar parámetros de consulta para acelerar las consultas que se ejecutan con frecuencia .
A continuación se muestra un ejemplo del uso de un parámetro en la cláusula WHERE
para consultar registros que contienen un valor específico para LastName
.
Ejecute la muestra utilizando el argumento query_data_with_parameter.
python snippets . py test - instance -- database - id example - db query_data_with_parameter
Deberías ver el siguiente resultado:
SingerId : 12 , FirstName : Melissa , LastName : Garcia
Leer datos usando la API de lectura Además de la interfaz SQL de Spanner, Spanner también admite una interfaz de lectura.
Utilice el método read()
de un objeto Snapshot
para leer filas de la base de datos. Para obtener un objeto Snapshot
, llame al método snapshot()
de la clase Database
en una instrucción ` with
. Utilice un objeto KeySet
para definir una colección de claves y rangos de claves para leer.
Aquí se explica cómo leer los datos:
Ejecute la muestra utilizando el argumento read_data
.
python snippets . py test - instance -- database - id example - db read_data
Debería ver un resultado similar a este:
SingerId : 1 , AlbumId : 1 , AlbumTitle : Total Junk
SingerId : 1 , AlbumId : 2 , AlbumTitle : Go , Go , Go
SingerId : 2 , AlbumId : 1 , AlbumTitle : Green
SingerId : 2 , AlbumId : 2 , AlbumTitle : Forever Hold Your Peace
SingerId : 2 , AlbumId : 3 , AlbumTitle : Terrified
Actualizar el esquema de la base de datos Supongamos que necesita agregar una nueva columna llamada MarketingBudget
a la tabla Albums
. Agregar una nueva columna a una tabla existente requiere actualizar el esquema de su base de datos. Spanner admite actualizaciones de esquema en una base de datos mientras esta continúa gestionando el tráfico. Las actualizaciones de esquema no requieren desconectar la base de datos ni bloquean tablas o columnas completas; puede seguir escribiendo datos en la base de datos durante la actualización del esquema. Obtenga más información sobre las actualizaciones de esquema admitidas y el rendimiento de los cambios de esquema en Realizar actualizaciones de esquema .
Agregar una columna Puede agregar una columna en la línea de comando mediante la CLI de Google Cloud o mediante programación utilizando la biblioteca cliente Spanner para Python.
En la línea de comandos Utilice el siguiente comando ALTER TABLE
para agregar la nueva columna a la tabla:
Google SQL
gcloud spanner databases ddl update example - db -- instance = test - instance \
-- ddl = 'ALTER TABLE Albums ADD COLUMN MarketingBudget INT64'
PostgreSQL
gcloud spanner databases ddl update example - db -- instance = test - instance \
-- ddl = 'ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT'
Deberías ver:
Schema updating ... done .
Utilice la biblioteca cliente Spanner para Python Utilice el método update_ddl()
de la clase Database
para modificar el esquema: Ejecute la muestra utilizando el argumento add_column
.
python snippets . py test - instance -- database - id example - db add_column
Deberías ver:
Added the MarketingBudget column .
Escribir datos en la nueva columna El siguiente código escribe datos en la nueva columna. Establece MarketingBudget
en 100000
para la fila especificada por Albums(1, 1)
y en 500000
para la fila especificada por Albums(2, 2)
.
Ejecute la muestra utilizando el argumento update_data
.
python snippets . py test - instance -- database - id example - db update_data
También puede ejecutar una consulta SQL o una llamada de lectura para obtener los valores que acaba de escribir.
Aquí está el código para ejecutar la consulta:
Para ejecutar esta consulta, ejecute el ejemplo utilizando el argumento query_data_with_new_column
.
python snippets . py test - instance -- database - id example - db query_data_with_new_column
Deberías ver:
SingerId : 2 , AlbumId : 2 , MarketingBudget : 500000
SingerId : 1 , AlbumId : 2 , MarketingBudget : None
SingerId : 2 , AlbumId : 1 , MarketingBudget : None
SingerId : 2 , AlbumId : 3 , MarketingBudget : None
SingerId : 1 , AlbumId : 1 , MarketingBudget : 100000
Actualizar datos Puede actualizar datos utilizando DML en una transacción de lectura y escritura.
Utilice el método execute_update()
para ejecutar una declaración DML.
Ejecute la muestra utilizando el argumento write_with_dml_transaction
.
python snippets . py test - instance -- database - id example - db write_with_dml_transaction
Deberías ver:
Transferred 200000 from Album2 's budget to Album1' s
Utilice un índice secundario Supongamos que desea obtener todas las filas de Albums
con valores AlbumTitle
dentro de un rango determinado. Podría leer todos los valores de la columna AlbumTitle
mediante una sentencia SQL o una llamada de lectura y luego descartar las filas que no cumplan los criterios. Sin embargo, realizar este análisis completo de la tabla es costoso, especialmente en tablas con muchas filas. En su lugar, puede acelerar la recuperación de filas al buscar por columnas que no sean de clave principal creando un índice secundario en la tabla.
Añadir un índice secundario a una tabla existente requiere una actualización del esquema. Al igual que otras actualizaciones de esquema, Spanner permite añadir un índice mientras la base de datos sigue gestionando el tráfico. Spanner rellena automáticamente el índice con los datos existentes. El proceso de rellenado puede tardar unos minutos, pero no es necesario desconectar la base de datos ni evitar escribir en la tabla indexada durante el proceso. Para más información, consulte "Añadir un índice secundario" .
Tras agregar un índice secundario, Spanner lo usa automáticamente para las consultas SQL que probablemente se ejecuten más rápido con él. Si usa la interfaz de lectura, debe especificar el índice que desea usar.
Agregar un índice secundario Puede agregar un índice en la línea de comando usando la CLI de gcloud o programáticamente usando la biblioteca cliente Spanner para Python.
En la línea de comandos Utilice el siguiente comando CREATE INDEX
para agregar un índice a la base de datos:
gcloud spanner databases ddl update example-db --instance= test-instance \
--ddl= 'CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)'
Deberías ver:
Schema updating ... done .
Uso de la biblioteca cliente Spanner para Python Utilice el método update_ddl()
de la clase Database
para agregar un índice: Ejecute la muestra utilizando el argumento add_index
.
python snippets . py test - instance -- database - id example - db add_index
Añadir un índice puede tardar unos minutos. Una vez añadido, debería ver lo siguiente:
Added the AlbumsByAlbumTitle index .
Leer utilizando el índice Para las consultas SQL, Spanner utiliza automáticamente un índice apropiado. En la interfaz de lectura, debe especificar el índice en su solicitud.
Para usar el índice en la interfaz de lectura, proporcione un argumento Index
al método read()
de un objeto Snapshot
. Para obtener un objeto Snapshot
, llame al método snapshot()
de la clase Database
en una instrucción " with
.
Ejecute la muestra utilizando el argumento read_data_with_index
.
python snippets . py test - instance -- database - id example - db read_data_with_index
Deberías ver:
AlbumId : 2 , AlbumTitle : Forever Hold Your Peace
AlbumId : 2 , AlbumTitle : Go , Go , Go
AlbumId : 1 , AlbumTitle : Green
AlbumId : 3 , AlbumTitle : Terrified
AlbumId : 1 , AlbumTitle : Total Junk
Agregar un índice para lecturas de solo índice Quizás haya notado que el ejemplo de lectura anterior no incluye la lectura de la columna MarketingBudget
. Esto se debe a que la interfaz de lectura de Spanner no permite unir un índice con una tabla de datos para buscar valores que no están almacenados en el índice.
Cree una definición alternativa de AlbumsByAlbumTitle
que almacene una copia de MarketingBudget
en el índice.
En la línea de comandos Google SQL
gcloud spanner databases ddl update example - db -- instance = test - instance \
-- ddl = 'CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)
PostgreSQL
gcloud spanner databases ddl update example - db -- instance = test - instance \
-- ddl = 'CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) INCLUDE (MarketingBudget)
Añadir un índice puede tardar unos minutos. Una vez añadido, debería ver lo siguiente:
Schema updating ... done .
Uso de la biblioteca cliente Spanner para Python Utilice el método update_ddl()
de la clase Database
para agregar un índice con una cláusula STORING
: Ejecute la muestra utilizando el argumento add_storing_index
.
python snippets . py test - instance -- database - id example - db add_storing_index
Deberías ver:
Added the AlbumsByAlbumTitle2 index .
Ahora puede ejecutar una lectura que obtenga todas las columnas AlbumId
, AlbumTitle
y MarketingBudget
del índice AlbumsByAlbumTitle2
:
Ejecute la muestra utilizando el argumento read_data_with_storing_index
.
python snippets . py test - instance -- database - id example - db read_data_with_storing_index
Debería ver un resultado similar a este:
AlbumId : 2 , AlbumTitle : Forever Hold Your Peace , MarketingBudget : 300000
AlbumId : 2 , AlbumTitle : Go , Go , Go , MarketingBudget : None
AlbumId : 1 , AlbumTitle : Green , MarketingBudget : None
AlbumId : 3 , AlbumTitle : Terrified , MarketingBudget : None
AlbumId : 1 , AlbumTitle : Total Junk , MarketingBudget : 300000
Recuperar datos mediante transacciones de solo lectura Supongamos que desea ejecutar más de una lectura en la misma marca de tiempo. Las transacciones de solo lectura siguen un prefijo consistente del historial de confirmación de transacciones, por lo que su aplicación siempre recibe datos consistentes.