Connectez-vous à LindormTable via SQLAlchemy et effectuez des opérations CRUD grâce à son interface compatible MySQL. Ce guide explique comment installer les dépendances, configurer la connexion, définir un modèle et exécuter des opérations d'insertion, de requête, de mise à jour et de suppression.
Prérequis
Avant de commencer, vérifiez que vous disposez des éléments suivants :
Python 3.7 ou version ultérieure installé
LindormTable version 2.6.1 ou ultérieure. Consultez les Notes de version de LindormTable et la procédure pour Mettre à niveau la version mineure du moteur d'une instance Lindorm
La compatibilité MySQL activée sur votre instance. Consultez la page Activer la fonctionnalité de compatibilité MySQL
L'adresse IP de votre client ajoutée à la liste d'autorisation de l'instance. Consultez la page Configurer une liste d'autorisation
Installer les dépendances
LindormTable expose un endpoint compatible MySQL. Pour vous y connecter depuis Python, vous avez besoin de deux bibliothèques :
SQLAlchemy : la couche ORM qui permet de mapper des classes Python vers des tables de base de données et d'écrire des requêtes en Python plutôt qu'en SQL brut
PyMySQL : le pilote de base de données qui gère la communication sous-jacente via le protocole MySQL ; SQLAlchemy n'inclut pas de pilote
Installez les deux bibliothèques :
pip install PyMySQL
pip install SQLAlchemy
Configurer la connexion
Utilisez create_engine() pour initialiser une connexion à votre instance LindormTable.
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://<user>:<password>@<lindorm_mysql_addr>:33060/<database>',
echo=True
)
| Paramètre | Description |
|---|---|
<user> |
Votre nom d'utilisateur LindormTable. Pour réinitialiser un mot de passe oublié, consultez la page Modifier le mot de passe d'un utilisateur |
<password> |
Le mot de passe de l'utilisateur. Pour réinitialiser un mot de passe oublié, consultez la page Modifier le mot de passe d'un utilisateur |
<lindorm_mysql_addr> |
L'endpoint compatible MySQL. Consultez la page Afficher les endpoints |
<database> |
Le nom de la base de données cible. La valeur par défaut est default |
Choix du type d'endpoint :
| Déploiement | Endpoint à utiliser | Comment l'obtenir |
|---|---|---|
| Application sur une instance ECS (recommandé) | Endpoint VPC compatible MySQL — offre une sécurité accrue et une latence réseau plus faible | Consultez la page Afficher les endpoints |
| Application déployée sur site (on-premises) | Endpoint Internet compatible MySQL | Avant de vous connecter, activez l'endpoint public dans la console Lindorm : accédez à Database Connections > Wide Table Engine, puis cliquez sur Enable Public Endpoint |
Définir un modèle
Définissez la structure de votre table sous forme de classe Python en utilisant la base déclarative de 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))
Effectuer des opérations CRUD
Tous les exemples utilisent une session SQLAlchemy pour interagir avec LindormTable.
Créer la table et insérer des données
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()
Interroger des données
# Query rows matching a filter condition
rows = session.query(Player).filter(Player.player_id == 1001).all()
print([row.__str__() for row in rows])
Mettre à jour des données
# Update a field for rows matching a filter condition
session.query(Player).filter(Player.player_id == 1003).update({"player_name": "brown"})
session.commit()
Supprimer des données
# Delete rows matching a filter condition
session.query(Player).filter(Player.player_id == 1002).delete()
session.commit()
Exemple de code complet
Voici un exemple complet et fonctionnel. Remplacez les espaces réservés de la chaîne de connexion par vos valeurs réelles avant de l'exécuter.
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])
Sortie attendue :
['1001 john 2.08']
['1001 john 2.08', '1003 brown 1.82']
Étapes suivantes
Afficher les endpoints — obtenez les adresses des endpoints VPC et publics pour votre instance
Configurer une liste d'autorisation — contrôlez les adresses IP autorisées à se connecter à votre instance
Activer la fonctionnalité de compatibilité MySQL — activez la prise en charge du protocole MySQL si ce n'est pas déjà fait