Conecte-se ao LindormTable usando SQLAlchemy e execute operações CRUD pela interface compatível com MySQL. Este guia aborda a instalação de dependências, a configuração da conexão, a definição do modelo e a execução de operações de inserção, consulta, atualização e exclusão.
Pré-requisitos
Antes de começar, verifique se você tem:
Python 3.7 ou posterior instalado
LindormTable versão 2.6.1 ou posterior. Consulte Notas de versão do LindormTable e Atualize a versão secundária do mecanismo de uma instância Lindorm
Compatibilidade com MySQL ativada na sua instância. Consulte Ative o recurso de compatibilidade com MySQL
Endereço IP do cliente adicionado à lista de permissões da instância. Consulte Configure uma lista de permissões
Instale dependências
O LindormTable expõe um endpoint compatível com MySQL. A conexão via Python exige duas bibliotecas:
SQLAlchemy: camada ORM que mapeia classes Python para tabelas de banco de dados e permite escrever consultas em Python em vez de SQL puro
PyMySQL: driver de banco de dados que gerencia a comunicação do protocolo MySQL; o SQLAlchemy não inclui driver
Instale ambas:
pip install PyMySQL
pip install SQLAlchemy
Configure a conexão
Use create_engine() para inicializar a conexão com sua instância do LindormTable.
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://<user>:<password>@<lindorm_mysql_addr>:33060/<database>',
echo=True
)
|
Parâmetro |
Descrição |
|
|
Nome de usuário do LindormTable. Para redefinir uma senha esquecida, consulte Modifique uma senha de usuário |
|
|
Senha do usuário. Para redefinir uma senha esquecida, consulte Modifique uma senha de usuário |
|
|
Endpoint compatível com MySQL. Consulte Visualize endpoints |
|
|
Nome do banco de dados de destino. O padrão é |
Escolha do tipo de endpoint:
|
Implantação |
Endpoint a ser usado |
Como obter |
|
Aplicação em uma instância ECS (recomendado) |
Endpoint VPC compatível com MySQL — oferece maior segurança e menor latência de rede |
Consulte Visualize endpoints |
|
Aplicação on-premises |
Endpoint de Internet compatível com MySQL |
Antes de conectar, ative o endpoint público no console Lindorm: acesse Database Connections > Wide Table Engine e clique em Enable Public Endpoint |
Definir um modelo
Defina a estrutura da tabela como uma classe Python usando a base declarativa do SQLAlchemy.
from sqlalchemy import Column, String, Integer, Float
from sqlalchemy.orm import declarative_base
Base = declarative_base()
class Player(Base):
__tablename__ = 'player'
player_id = Column(Integer, primary_key=True, autoincrement=False)
player_name = Column(String(255))
player_height = Column(Float)
def __str__(self):
return " ".join(str(item) for item in (self.player_id, self.player_name, self.player_height))
Executar operações CRUD
Todos os exemplos usam uma sessão do SQLAlchemy para interagir com o LindormTable.
Crie a tabela e inserir dados
from sqlalchemy.orm import sessionmaker
# Create the table based on the model definition
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# Insert a single row
new_player = Player(player_id=1001, player_name="john", player_height=2.08)
session.add(new_player)
# Insert multiple rows
session.add_all([
Player(player_id=1002, player_name="bob", player_height=1.65),
Player(player_id=1003, player_name="smith", player_height=1.82),
])
session.commit()
Consultar dados
# Query rows matching a filter condition
rows = session.query(Player).filter(Player.player_id == 1001).all()
print([row.__str__() for row in rows])
Atualize dados
# Update a field for rows matching a filter condition
session.query(Player).filter(Player.player_id == 1003).update({"player_name": "brown"})
session.commit()
Exclua dados
# Delete rows matching a filter condition
session.query(Player).filter(Player.player_id == 1002).delete()
session.commit()
Código de exemplo completo
Veja a seguir um exemplo funcional completo. Substitua os espaços reservados da string de conexão pelos valores reais antes de executar.
from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer, Float
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
# Define the Player model
class Player(Base):
__tablename__ = 'player'
player_id = Column(Integer, primary_key=True, autoincrement=False)
player_name = Column(String(255))
player_height = Column(Float)
def __str__(self):
return " ".join(str(item) for item in (self.player_id, self.player_name, self.player_height))
# Initialize the connection. Replace the placeholders with your actual values.
engine = create_engine(
'mysql+pymysql://user:test@ld-bp1l39h99192d****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/default',
echo=True
)
Session = sessionmaker(bind=engine)
# Create the table
Base.metadata.create_all(engine)
# Open a session
session = Session()
# Insert a single row
new_player = Player(player_id=1001, player_name="john", player_height=2.08)
session.add(new_player)
# Insert multiple rows
session.add_all([
Player(player_id=1002, player_name="bob", player_height=1.65),
Player(player_id=1003, player_name="smith", player_height=1.82),
])
session.commit()
# Query rows where player_id is 1001
rows = session.query(Player).filter(Player.player_id == 1001).all()
print([row.__str__() for row in rows])
# Delete the row where player_id is 1002
session.query(Player).filter(Player.player_id == 1002).delete()
session.commit()
# Update the row where player_id is 1003
session.query(Player).filter(Player.player_id == 1003).update({"player_name": "brown"})
session.commit()
# Query all remaining rows
rows = session.query(Player).all()
print([row.__str__() for row in rows])
Saída esperada:
['1001 john 2.08']
['1001 john 2.08', '1003 brown 1.82']
Próximos passos
Visualize endpoints — obtenha os endereços dos endpoints VPC e público da sua instância
Configure uma lista de permissões — controle quais endereços IP podem se conectar à sua instância
Ative o recurso de compatibilidade com MySQL — ative o suporte ao protocolo MySQL, se ainda não estiver ativado