mysql-connector-python est le connecteur MySQL officiel en pur Python, sans dépendance de bibliothèque C. Ce guide explique comment connecter une application Python à LindormTable et exécuter des opérations CRUD. À l’issue de cette lecture, vous saurez :
Installer et configurer le connecteur
Vous connecter à LindormTable en mode connexion directe ou via un pool de connexions
Créer, insérer, mettre à jour, supprimer et interroger des données en utilisant la syntaxe SQL des tables larges de LindormTable
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Python 3.8 ou version ultérieure installé
La compatibilité MySQL activée pour votre instance Lindorm. Pour plus d’informations, consultez la rubrique Activer la fonctionnalité de compatibilité MySQL
L’adresse IP de votre client ajoutée à la liste d’autorisation de l’instance. Pour plus d’informations, consultez la rubrique Configurer les listes d’autorisation
Installer le connecteur
Exécutez la commande suivante pour installer mysql-connector-python 8.0.15 :
pip install mysql-connector-python==8.0.15
Se connecter à LindormTable
Le tableau ci-dessous décrit les paramètres de connexion utilisés dans tous les exemples. Remplacez les valeurs indicatives par vos propres valeurs avant d’exécuter le code.
| Paramètre | Description | Exemple |
|---|---|---|
host |
L’adresse SQL de table large Lindorm, sans les deux-points ni le numéro de port (:33060). Pour trouver cette valeur, consultez la rubrique Afficher les endpoints. |
ld-bp1hn6yq0yb34****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com |
port |
Fixé à 33060. |
33060 |
user |
Votre nom d’utilisateur LindormTable. Pour réinitialiser un mot de passe oublié, consultez la rubrique Modifier votre mot de passe. | root |
passwd |
Votre mot de passe LindormTable. | — |
database |
La base de données à laquelle se connecter. La valeur par défaut est default si aucun paramètre n’est spécifié. |
default |
Si votre application s’exécute sur une instance Elastic Compute Service (ECS) située dans le même Virtual Private Cloud (VPC) que votre instance Lindorm, connectez-vous via l’endpoint VPC. Dans le cas contraire, utilisez l’endpoint public. Pour activer l’endpoint public, consultez la rubrique Activer LindormSearch.
Créez toujours le curseur avec l’option prepared=True. Sans cela, les chaînes contenant des caractères spéciaux tels que les guillemets doubles (") peuvent être échappées incorrectement lors de l’écriture dans LindormTable.
Choisir un mode de connexion
mysql-connector-python prend en charge deux modes de connexion :
| Mode | Cas d’utilisation |
|---|---|
| Connexion directe | Opérations ponctuelles ou accès peu fréquents. Ouvre et ferme une nouvelle connexion pour chaque opération. |
| Pool de connexions | Accès fréquent. Réutilise les connexions afin de réduire la surcharge et d’améliorer les performances. |
Exemples de code
Mode connexion directe
L’exemple suivant établit une connexion directe et exécute des opérations de création, d’insertion, de suppression, de mise à jour et d’interrogation sur une table de test.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import json
import mysql.connector
# Establish a connection. Replace the placeholder values with your own.
connection = mysql.connector.connect(
host='<Lindorm Wide Table SQL Address>',
port=33060,
user='<username>',
passwd='<password>',
database='default'
)
# Create a cursor. Use prepared=True to handle special characters correctly.
cursor = connection.cursor(prepared=True)
# Create a table.
sql_create_table = (
"create table if not exists test_python"
"(c1 integer, c2 integer, c3 varchar, primary key(c1))"
)
print(sql_create_table)
cursor.execute(sql_create_table)
# Insert data — single rows.
sql_upsert = "upsert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_upsert)
cursor.execute(sql_upsert, (1, 1, '1'))
cursor.execute(sql_upsert, (2, 2, json.dumps({"key": "value2"})))
# Insert data — two rows in a batch.
sql_upsert_batch = "upsert into test_python(c1, c2, c3) values(?, ?, ?), (?, ?, ?)"
cursor.execute(sql_upsert_batch, (3, 3, '3', 4, 4, json.dumps({"key": "value4"})))
# Delete data.
sql_delete = "delete from test_python where c1 = ?"
print(sql_delete)
cursor.execute(sql_delete, (3,))
# Update data.
sql_update = "upsert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_update)
cursor.execute(sql_update, (1, 2, '2'))
# Query a specific row.
sql_select = "select * from test_python where c1 = ?"
print(sql_select)
cursor.execute(sql_select, (4,))
rows = cursor.fetchall()
print(rows)
# Query all rows.
sql_select_all = "select * from test_python"
print(sql_select_all)
cursor.execute(sql_select_all)
rows = cursor.fetchall()
print(rows)
# Close the cursor and connection.
cursor.close()
connection.close()
Mode pool de connexions
L’exemple suivant crée un pool de connexions, récupère une connexion depuis ce pool et exécute le même ensemble d’opérations. Lorsque vous appelez connection.close(), la connexion retourne au pool au lieu d’être fermée définitivement.
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import json
import mysql.connector
from mysql.connector import pooling
# Create a connection pool.
# Adjust pool_size based on your expected workload concurrency.
connection_pool = pooling.MySQLConnectionPool(
pool_name="mypool",
pool_size=20,
host='<Lindorm Wide Table SQL Address>',
port=33060,
user='<username>',
password='<password>',
database='default',
)
# Get a connection from the pool.
connection = connection_pool.get_connection()
# Create a cursor. Use prepared=True to handle special characters correctly.
cursor = connection.cursor(prepared=True)
# Drop the table if it exists, then recreate it.
sql_drop_table = "drop table if exists test_python"
print(sql_drop_table)
cursor.execute(sql_drop_table)
sql_create_table = (
"create table test_python"
"(c1 integer, c2 integer, c3 varchar, primary key(c1))"
)
print(sql_create_table)
cursor.execute(sql_create_table)
# Insert data — single rows.
sql_upsert = "insert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_upsert)
cursor.execute(sql_upsert, (1, 1, '1'))
cursor.execute(sql_upsert, (2, 2, '2'))
# Insert data — three rows in a batch.
sql_upsert_batch = (
"insert into test_python(c1, c2, c3) values(?, ?, ?), (?, ?, ?), (?, ?, ?)"
)
cursor.execute(sql_upsert_batch, (3, 3, '3', 4, 4, '4', 5, 5, '5'))
# Delete data.
sql_delete = "delete from test_python where c1 = ?"
print(sql_delete)
cursor.execute(sql_delete, (3,))
# Update data.
sql_update = "upsert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_update)
cursor.execute(sql_update, (1, 2, '2'))
# Query a specific row.
sql_select = "select * from test_python where c1 = ?"
print(sql_select)
cursor.execute(sql_select, (4,))
rows = cursor.fetchall()
print(rows)
# Query all rows.
sql_select_all = "select * from test_python"
print(sql_select_all)
cursor.execute(sql_select_all)
rows = cursor.fetchall()
print(rows)
# Close the cursor.
# Calling connection.close() returns the connection to the pool.
cursor.close()
connection.close()
Étapes suivantes
Afficher les endpoints — Trouver l’endpoint approprié pour l’accès VPC ou public
Modifier votre mot de passe — Réinitialiser vos identifiants LindormTable