Prepare seu ambiente Python local Siga as instruções em Configurando um ambiente de desenvolvimento Python .
Clone o repositório do aplicativo de exemplo na sua máquina local:
git clone https : // github . com / googleapis / python - spanner
Como alternativa, você pode baixar o exemplo como um arquivo zip e extraí-lo.
Mude para o diretório que contém o código de exemplo do Spanner:
cd python - spanner / samples / samples
Crie um ambiente Python isolado e instale dependências:
virtualenv env
source env / bin / activate
pip install - r requirements . txt
Criar uma instância Ao usar o Spanner pela primeira vez, você precisa criar uma instância, que é uma alocação de recursos usados pelos bancos de dados do Spanner. Ao criar uma instância, você escolhe uma configuração de instância , que determina onde seus dados serão armazenados, e também o número de nós a serem usados, que determina a quantidade de recursos de serviço e armazenamento na sua instância.
Execute o seguinte comando para criar uma instância do Spanner na região us-central1
com 1 nó:
gcloud spanner instances create test-instance --config= regional-us-central1 \
--description= "Test Instance" --nodes= 1
Observe que isso cria uma instância com as seguintes características:
ID da instância test-instance
Nome de exibição Test Instance
Configuração de instância regional-us-central1
(Configurações regionais armazenam dados em uma região, enquanto configurações multirregionais distribuem dados entre várias regiões. Para obter mais informações, consulte Sobre instâncias .) Contagem de nós de 1 ( node_count
corresponde à quantidade de recursos de serviço e armazenamento disponíveis para bancos de dados na instância. Saiba mais em Nós e unidades de processamento .) Você deverá ver:
Creating instance ... done .
Veja os arquivos de amostra O repositório de exemplos contém um exemplo que mostra como usar o Spanner com Python.
Dê uma olhada no arquivo snippets.py
, que mostra como usar o Spanner. O código mostra como criar e usar um novo banco de dados. Os dados usam o esquema de exemplo mostrado na página Esquema e modelo de dados . Criar um banco de dados GoogleSQL
python snippets . py test - instance -- database - id example - db create_database
PostgreSQL
python pg_snippets . py test - instance -- database - id example - db create_database
Você deverá ver:
Created database example - db on instance test - instance
O código a seguir cria um banco de dados e duas tabelas no banco de dados. Observação: os exemplos de código subsequentes usam essas duas tabelas. Se você não executar este código, crie as tabelas usando o comando Google Cloud console ou a CLI do gcloud. Para obter mais informações, consulte o esquema de exemplo . O próximo passo é gravar dados no seu banco de dados.
Criar um cliente de banco de dados Antes de poder realizar leituras ou gravações, você precisa criar um Client
. Pense em um Client
como uma conexão de banco de dados: todas as suas interações com o Spanner devem passar por um Client
. Normalmente, você cria um Client
quando seu aplicativo é inicializado e, em seguida, reutiliza esse Client
para ler, gravar e executar transações. O código a seguir mostra como criar um cliente. Leia mais na Referência Client
.
Escrever dados com DML Você pode inserir dados usando Linguagem de Manipulação de Dados (DML) em uma transação de leitura e gravação.
Use o método execute_update()
para executar uma instrução DML.
Execute o exemplo usando o argumento insert_with_dml
.
python snippets . py test - instance -- database - id example - db insert_with_dml
Você deverá ver:
4 record ( s ) inserted .
Observação: há limites para o tamanho do commit. Consulte Limite de CRUD para obter mais informações.
Escrever dados com mutações Você também pode inserir dados usando mutações .
Você grava dados usando um objeto Batch
. Um objeto Batch
é um contêiner para operações de mutação. Uma mutação representa uma sequência de inserções, atualizações e exclusões que o Spanner aplica atomicamente a diferentes linhas e tabelas em um banco de dados Spanner.
O método insert()
na classe Batch
adiciona uma ou mais mutações de inserção ao lote. Todas as mutações em um único lote são aplicadas atomicamente.
Este código mostra como escrever os dados usando mutações:
Execute o exemplo usando o argumento insert_data
.
python snippets . py test - instance -- database - id example - db insert_data
Você deverá ver:
Inserted data .
Observação: há limites para o tamanho do commit. Consulte Limite de CRUD para obter mais informações. Consultar dados usando SQL O Spanner oferece suporte a uma interface SQL para leitura de dados, que você pode acessar na linha de comando usando o Google Cloud CLI ou programaticamente usando a biblioteca de cliente do Spanner para Python.
Na linha de comando Execute a seguinte instrução SQL para ler os valores de todas as colunas da tabela Albums
:
gcloud spanner databases execute - sql example - db -- instance = test - instance \
-- sql = 'SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
O resultado deve 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
Use a biblioteca cliente Spanner para Python Além de executar uma instrução SQL na linha de comando, você pode emitir a mesma instrução SQL programaticamente usando a biblioteca de cliente Spanner para Python.
Use o método execute_sql()
de um objeto Snapshot
para executar a consulta SQL. Para obter um objeto Snapshot
, chame o método snapshot()
da classe Database
em uma instrução with
.
Veja como emitir a consulta e acessar os dados:
Execute o exemplo usando o argumento query_data
.
python snippets . py test - instance -- database - id example - db query_data
Você deverá ver o seguinte 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 usando um parâmetro SQL Se o seu aplicativo tiver uma consulta executada com frequência, você pode melhorar seu desempenho parametrizando-a. A consulta paramétrica resultante pode ser armazenada em cache e reutilizada, o que reduz os custos de compilação. Para obter mais informações, consulte Usar parâmetros de consulta para acelerar consultas executadas com frequência .
Aqui está um exemplo de uso de um parâmetro na cláusula WHERE
para consultar registros que contêm um valor específico para LastName
.
Execute o exemplo usando o argumento query_data_with_parameter.
python snippets . py test - instance -- database - id example - db query_data_with_parameter
Você deverá ver o seguinte resultado:
SingerId : 12 , FirstName : Melissa , LastName : Garcia
Ler dados usando a API de leitura Além da interface SQL do Spanner, o Spanner também suporta uma interface de leitura.
Use o método read()
de um objeto Snapshot
para ler linhas do banco de dados. Para obter um objeto Snapshot
, chame o método snapshot()
da classe Database
em uma instrução with
. Use um objeto KeySet
para definir uma coleção de chaves e intervalos de chaves para leitura.
Veja como ler os dados:
Execute o exemplo usando o argumento read_data
.
python snippets . py test - instance -- database - id example - db read_data
Você deverá ver uma saída semelhante a:
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
Atualizar o esquema do banco de dados Suponha que você precise adicionar uma nova coluna chamada MarketingBudget
à tabela Albums
. Adicionar uma nova coluna a uma tabela existente requer uma atualização do esquema do seu banco de dados. O Spanner suporta atualizações de esquema em um banco de dados enquanto este continua a servir tráfego. As atualizações de esquema não exigem que o banco de dados fique offline e não bloqueiam tabelas ou colunas inteiras; você pode continuar gravando dados no banco de dados durante a atualização do esquema. Saiba mais sobre as atualizações de esquema suportadas e o desempenho das alterações de esquema em Fazer atualizações de esquema .
Adicionar uma coluna Você pode adicionar uma coluna na linha de comando usando o Google Cloud CLI ou programaticamente usando a biblioteca de cliente Spanner para Python.
Na linha de comando Use o seguinte comando ALTER TABLE
para adicionar a nova coluna à tabela:
GoogleSQL
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'
Você deverá ver:
Schema updating ... done .
Use a biblioteca cliente Spanner para Python Use o método update_ddl()
da classe Database
para modificar o esquema: Execute o exemplo usando o argumento add_column
.
python snippets . py test - instance -- database - id example - db add_column
Você deverá ver:
Added the MarketingBudget column .
Grave dados na nova coluna O código a seguir grava dados na nova coluna. Ele define MarketingBudget
como 100000
para a linha indexada por Albums(1, 1)
e como 500000
para a linha indexada por Albums(2, 2)
.
Execute o exemplo usando o argumento update_data
.
python snippets . py test - instance -- database - id example - db update_data
Você também pode executar uma consulta SQL ou uma chamada de leitura para buscar os valores que acabou de escrever.
Aqui está o código para executar a consulta:
Para executar esta consulta, execute o exemplo usando o argumento query_data_with_new_column
.
python snippets . py test - instance -- database - id example - db query_data_with_new_column
Você deverá 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
Atualizar dados Você pode atualizar dados usando DML em uma transação de leitura e gravação.
Use o método execute_update()
para executar uma instrução DML.
Execute o exemplo usando o argumento write_with_dml_transaction
.
python snippets . py test - instance -- database - id example - db write_with_dml_transaction
Você deverá ver:
Transferred 200000 from Album2 's budget to Album1' s
Use um índice secundário Suponha que você queira buscar todas as linhas de Albums
que possuem valores AlbumTitle
em um determinado intervalo. Você poderia ler todos os valores da coluna AlbumTitle
usando uma instrução SQL ou uma chamada de leitura e, em seguida, descartar as linhas que não atendem aos critérios, mas realizar essa varredura completa da tabela é caro, especialmente para tabelas com muitas linhas. Em vez disso, você pode acelerar a recuperação de linhas ao pesquisar por colunas que não sejam de chave primária criando um índice secundário na tabela.
Adicionar um índice secundário a uma tabela existente requer uma atualização de esquema. Assim como outras atualizações de esquema, o Spanner permite a adição de um índice enquanto o banco de dados continua a servir tráfego. O Spanner preenche automaticamente o índice com os dados existentes. Os preenchimentos podem levar alguns minutos para serem concluídos, mas você não precisa desconectar o banco de dados nem evitar gravar na tabela indexada durante esse processo. Para obter mais detalhes, consulte Adicionar um índice secundário .
Após adicionar um índice secundário, o Spanner o utiliza automaticamente para consultas SQL que provavelmente serão executadas mais rapidamente com o índice. Se você usar a interface de leitura, deverá especificar o índice que deseja usar.
Adicionar um índice secundário Você pode adicionar um índice na linha de comando usando o gcloud CLI ou programaticamente usando a biblioteca de cliente Spanner para Python.
Na linha de comando Use o seguinte comando CREATE INDEX
para adicionar um índice ao banco de dados:
gcloud spanner databases ddl update example-db --instance= test-instance \
--ddl= 'CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)'
Você deverá ver:
Schema updating ... done .
Usando a biblioteca cliente Spanner para Python Use o método update_ddl()
da classe Database
para adicionar um índice: Execute o exemplo usando o argumento add_index
.
python snippets . py test - instance -- database - id example - db add_index
Adicionar um índice pode levar alguns minutos. Após adicioná-lo, você deverá ver:
Added the AlbumsByAlbumTitle index .
Leia usando o índice Para consultas SQL, o Spanner usa automaticamente um índice apropriado. Na interface de leitura, você deve especificar o índice na sua solicitação.
Para usar o índice na interface de leitura, forneça um argumento Index
ao método read()
de um objeto Snapshot
. Para obter um objeto Snapshot
, chame o método snapshot()
da classe Database
em uma instrução with
.
Execute o exemplo usando o argumento read_data_with_index
.
python snippets . py test - instance -- database - id example - db read_data_with_index
Você deverá 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
Adicionar um índice para leituras somente de índice Você deve ter notado que o exemplo de leitura anterior não inclui a leitura da coluna MarketingBudget
. Isso ocorre porque a interface de leitura do Spanner não suporta a capacidade de unir um índice a uma tabela de dados para pesquisar valores que não estão armazenados no índice.
Crie uma definição alternativa de AlbumsByAlbumTitle
que armazene uma cópia de MarketingBudget
no índice.
Na linha de comando GoogleSQL
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)
Adicionar um índice pode levar alguns minutos. Após adicioná-lo, você deverá ver:
Schema updating ... done .
Usando a biblioteca cliente Spanner para Python Use o método update_ddl()
da classe Database
para adicionar um índice com uma cláusula STORING
: Execute o exemplo usando o argumento add_storing_index
.
python snippets . py test - instance -- database - id example - db add_storing_index
Você deverá ver:
Added the AlbumsByAlbumTitle2 index .
Agora você pode executar uma leitura que busca todas as colunas AlbumId
, AlbumTitle
e MarketingBudget
do índice AlbumsByAlbumTitle2
:
Execute o exemplo usando o argumento read_data_with_storing_index
.
python snippets . py test - instance -- database - id example - db read_data_with_storing_index
Você deverá ver uma saída semelhante a:
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 dados usando transações somente leitura Suponha que você queira executar mais de uma leitura no mesmo registro de data e hora. Transações somente leitura observam um prefixo consistente do histórico de confirmações da transação, de modo que seu aplicativo sempre obtém dados consistentes.