Lorsque j'ai étudié comment faire fonctionner MySQL à partir de Python 3, j'ai trouvé beaucoup d'informations sur Python 2 et d'anciennes informations et c'était difficile à comprendre, donc je vais le résumer.
L'environnement utilise Python 3.6.
Il existe également un package appelé mysqlclient, mais le MySQL officiel mysql-connector-python-rf Il existe un package appelé -connector-python-rf), donc je vais utiliser celui-ci cette fois.
** [2018-12-03 Addendum] ** Veuillez noter que mysql-connector-python-rf
a cessé de se mettre à jour, et il semble y avoir un paquet appelé mysql-connector-python
, qui est également officiel pour MySQL. Voir la section des commentaires pour plus de détails.
Je ne sais pas grand-chose sur le mérite des deux packages, mais je trouve personnellement mysql-connector-python-rf plus facile à utiliser car je n'ai pas trouvé de moyen de traiter les résultats de la requête comme un dictionnaire avec mysqlclient.
Vous pouvez l'installer à partir de pip normalement.
$ pip install mysql-connector-python-rf
Le connecteur PostgreSQL (psycopg2) a pu se connecter en lançant simplement une chaîne URL, mais il semble que mysql-connector-python-rf ne le puisse pas. Il n'y a aucune aide pour cela, alors analysez-le avec urllib.
from urllib.parse import urlparse
import mysql.connector
url = urlparse('mysql://user:pass@localhost:3306/dbname')
conn = mysql.connector.connect(
host = url.hostname or 'localhost',
port = url.port or 3306,
user = url.username or 'root',
password = url.password or '',
database = url.path[1:],
)
Si vous voulez vérifier si vous pouvez vous connecter, utilisez ʻis_connected () `.
conn.is_connected() #=> Bool
Si vous maintenez la connexion ouverte, vous risquez de perdre la connexion avant de le savoir. Pour éviter cela, envoyez régulièrement un ping et reconnectez-vous si la connexion n'est pas possible.
conn.ping(reconnect=True)
Créez un objet curseur et exécutez la requête avec la méthode ʻexecute` de la même manière que Standard SQLite Connector.
cur = conn.cursor()
Après avoir exécuté la requête, vous pouvez récupérer l'enregistrement avec la méthode fetchone
/ fetchmany
/ fetchall
.
cur.execute('SELECT * FROM users')
cur.fetchall() #=> [(1, 'foo'), (2, 'bar')]
Les déclarations préparées sont également disponibles.
cur.execute('SELECT * FROM users WHERE id = %s', [1])
cur.statement #=> 'SELECT * FROM users WHERE id = 1'
cur.fetchone() #=> (1, 'foo')
Commit avec conn.commit ()
après avoir exécuté la requête.
try:
cur.execute('INSERT INTO users (name) VALUES (%s)', ['foo'])
conn.commit()
except:
conn.rollback()
raise
Si vous passez l'option dictionary
lors de la création d'un objet curseur, vous pouvez obtenir le résultat de l'exécution de la requête sous forme de dictionnaire.
cur = conn.cursor(dictionary=True)
cur.fetchall() #=> [{'id': 1, 'name': 'foo'}, {'id': 2, 'name': 'bar'}]
Voir ci-dessous pour les options qui peuvent être passées à d'autres objets curseur.
MySQL :: MySQL Connector/Python Developer Guide :: 10.6 Subclasses cursor.MySQLCursor
Recommended Posts