O PyODPS integra-se ao SQLAlchemy e permite consultar dados do MaxCompute com a sintaxe padrão do SQLAlchemy. Crie uma conexão e chame a API do SQLAlchemy para criar tabelas, inserir dados e executar consultas.
Criar uma conexão
Crie uma conexão conforme o exemplo a seguir.
import os
from sqlalchemy import create_engine
# Ensure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your AccessKey ID,
# and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your AccessKey secret.
# For security, avoid hardcoding your AccessKey ID and AccessKey secret in the connection string.
conn_string = 'odps://%s:%s@<project>/?endpoint=<endpoint>' % (
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
)
engine = create_engine(conn_string)
conn = engine.connect()
-
ALIBABA_CLOUD_ACCESS_KEY_ID: AccessKey ID com permissão para acessar o projeto MaxCompute de destino. Defina-o como variável de ambiente.
Obtenha o AccessKey ID na página AccessKey Pair.
-
ALIBABA_CLOUD_ACCESS_KEY_SECRET: AccessKey secret correspondente ao AccessKey ID. Defina-o como variável de ambiente.
Obtenha o AccessKey secret na página AccessKey Pair.
-
project: Nome do projeto MaxCompute de destino.
Este é o nome do projeto MaxCompute, não o nome do workspace. Para localizar o nome do projeto, faça login no MaxCompute console e acesse Workspace > Projects no painel de navegação à esquerda.
-
endpoint: Endpoint da região do projeto MaxCompute de destino.
Para obter a lista de endpoints por região, consulte Endpoints.
Se você já tiver um objeto ODPS o definido como global por meio de o.to_global(), omita os parâmetros anteriores na string de conexão. Exemplo:
from sqlalchemy import create_engine
o.to_global() # Make the ODPS object global
engine = create_engine('odps://')
Usar a API do SQLAlchemy
Os exemplos a seguir mostram como criar tabela, inserir dados e consultar dados:
-
Criar tabela
from sqlalchemy import Table, Column, Integer, String, MetaData metadata = MetaData() users = Table('users', metadata, Column('id', Integer), Column('name', String), Column('fullname', String), ) metadata.create_all(engine) -
Inserir dados
ins = users.insert().values(id=1, name='jack', fullname='Jack Jones') conn.execute(ins) -
Consultar dados
from sqlalchemy.sql import select s = select([users]) result = conn.execute(s) for row in result: print(row)Saída esperada:
(1, 'jack', 'Jack Jones')