Faisons la manipulation des données MySQL avec Python

J'utilise généralement Django pour me plonger pleinement dans les avantages du mappeur O / R, donc si je ne suis pas bon dans ce domaine Opérations sur les données qui peuvent être effectuées sans même écrire des instructions SQL dans une table qui n'a rien à voir avec Django Pouvez-vous dire "Monsieur, oui monsieur!" Lorsqu'on lui a demandé d'essayer? Je ne pouvais pas! Ensuite, j'ai fait de mon mieux donc je vais le résumer! L'article de Qiita commence!

Pour être honnête, ce que vous faites ne change pas beaucoup dans aucune langue, donc si vous vous en souvenez, vous pouvez également l'appliquer dans d'autres langues. Je pense que cela va fonctionner.

Connecteur de base de données MySQL

Si vous utilisez Django, vous avez un connecteur MySQL, non? Très bien, à côté! (J'aime lequel est le meilleur, alors je l'omets) Pour le moment, cet article concerne MySQL-python 1.2.5.

Connectons-nous

>>> import MySQLdb

>>>> conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')

Faisons une connexion pour le moment! MySQLdb a connection () et connect (), mais il utilise connect (). la raison est,

>>> conn = MySQLdb.connection(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
>>> print type(conn)
<type '_mysql.connection'>
>>> conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
>>> print type(conn)
<class 'MySQLdb.connections.Connection'>

Oui, tu comprends? Si vous vous connectez avec connection (), _mysql.connection sera Un objet MySQLdb.connections.Connection a été créé lors de la connexion avec connect ().

La classe _mysql est encapsulée dans la classe de base de MySQLdb et la fonction est ajoutée à MySQLdb. Puisque le curseur est implémenté dans MySQLdb, connect () est une option à utiliser pour la connexion. Soyez prudent car c'est un point addictif ici! (Bien que j'utilise connect (), il existe de nombreux échantillons de trap où le nom de la variable est connection!)

Quoi qu'il en soit, c'est SELECT, appelez-le SELECT!

Si vous pouvez vous connecter, essayons l'instruction SELECT dès que possible. Après cela, j'écrirai en supposant qu'il existe un objet conn connecté.

cursor = conn.cursor()
try:
  cursor.execute('select * from hoge_table where id=1')
  result = cursor.fetchall()
finally:
  cursor.close()
  conn.close()

Qu'est-ce qu'un curseur? Un concept qui ne peut être dit en un seul mot. Vraiment un concept. Certaines personnes expliquent qu'il s'agit d'une zone virtuelle pour effectuer séquentiellement plusieurs opérations sur la base de données. Pensez-y comme ça. Si vous voulez bien le connaître, allez à la mer sur le net! Vous pouvez lancer SQL avec conn.query ('select ~') sans l'utiliser, Puisqu'il n'est pas possible d'exécuter des transactions pour plusieurs opérations, il est courant d'utiliser des curseurs pour les opérations DB.

En outre, l'instruction SQL ne peut pas être récupérée en tant qu'objet simplement en la générant, mais en tant que jeu de résultats. Vous devez l'obtenir. Ce sera curseur.fetchall (). Il y a aussi fetchone () et fetchmany (), mais je pense que vous pouvez les utiliser correctement si nécessaire.

Les données récupérées sont, par exemple, un tableau hoge_table

id name hoge
1 hogee C'est hoge
2 hogege C'est hoge?

alors,

cursor.execute('select * from hoge_table')
result = cursor.fetchall()

Si vous prenez (grossièrement omis), le contenu du résultat est

((1, 'hogee', 'C'est hoge'), (2, 'hogege', 'C'est hoge?'))

Ce sera. e? Quel est le nom de la colonne? Vous pourriez avoir pensé, ** C'est doux ** Merci à O / R Mapper et préparez votre propre liste de noms de colonnes.

Enfin, la clause finally libère le curseur et la connexion, ** Bukkake avec clause ** Cependant, il n'y a aucune perte à le connaître en tant que méthode. Dans d'autres langues, je dois l'écrire moi-même. ~~ Eh bien, ça ne casse pas tellement même si je ne le relâche pas! ~~ Il est du devoir du programmeur de libérer rapidement des ressources précieuses

Très bien, alors MISE À JOUR!

Mettons à jour ensuite. Ne serait-il pas pratique de faire des mises à jour par lots avec le traitement par lots des scripts Python?

conn = MySQLdb.connect(host='hoge_host', user='hoge_user', passwd='hogehoge', db='hoge1')
conn.autocommit(False)

cursor = conn.cursor()
try:
  cursor.execute('update hoge_table set hoge="C'est hoge!" where id=1')
  cursor.execute('select * from hoge_table')
  result = cursor.fetchall()
  conn.commit()
except Exception as e:
  conn.rollback()
  raise e
finally:
  cursor.close()
  conn.close()

Dans la deuxième ligne, la validation automatique est définie sur False, mais c'est certainement la valeur par défaut False, il n'est donc pas nécessaire de dire que c'est inutile. Eh bien, cela peut dépendre du connecteur, il est donc plus sûr de le définir explicitement sur False. Si vous le définissez sur True, il s'engagera sans autorisation (c'est vrai). Si False, appelez commit () vous-même. Nous appelons également rollback () nous-mêmes. Il est plus sûr de consacrer autant de temps et d'efforts si vous pouvez le faire dans les coulisses.

L'instruction SELECT est émise sur la ligne suivant l'instruction UPDATE, mais cela peut être la validation du résultat de la mise à jour. Vous pouvez le faire avec ça! Ceci est un exemple. Si vous n'aimez pas le résultat, faites une exception et faites-la revenir en arrière. Puisque cette zone ne peut pas être créée sans utiliser un curseur, connect () est toujours une option. Cela se reflète dans la base de données en appelant la fonction commit ().


C'est tout pour cette fois. Avec cela, tout à coup opération DB sans mappeur O / R Même si une tâche arrive, nous serons en mesure de la gérer. De plus, le fait que le framework agisse généralement en votre nom est également une question de contenu. Je pense que le savoir aidera à mieux comprendre.

"Attendez une minute! Il n'y a ni INSERT ni DELETE"

Ce qu'il faut faire n'est pas très différent de UPDATE, donc il est omis

"Attendez une minute! Il n'y a pas d'ALTER"

Besoin de le faire avec un script?

Recommended Posts

Faisons la manipulation des données MySQL avec Python
Recevoir des données textuelles de mysql avec python
Analyse de données avec python 2
Faites Houdini avec Python3! !! !!
Manipulation des données avec les Pandas!
Analyse de données avec Python
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Écrivons python avec cinema4d.
Faisons R-CNN avec Sklearn-theano
Manipulation d'expressions régulières par Python
Construisons git-cat avec Python
Regroupement de connexions avec Python + MySQL
Lire des données json avec python
Remarques sur l'importation de données depuis MySQL ou CSV avec Python
Résumé de base de la manipulation de données avec Python Pandas - Première moitié: création et manipulation de données
Faisons une interface graphique avec python.
Construire un environnement Mysql + Python avec docker
[Python] Obtenez des données économiques avec DataReader
Jouons avec Excel avec Python [Débutant]
Pour faire une récursion avec Python2
Structure de données Python apprise avec la chimioinfomatique
Que faire avec la sortie de PYTHON?
Visualisez facilement vos données avec Python seaborn.
Faisons un graphe avec python! !!
Traiter les données Pubmed .xml avec python
Analyse de données à partir de python (visualisation de données 1)
Analyse de données à partir de python (visualisation de données 2)
Analysons la voix avec Python # 1 FFT
Application de Python: Nettoyage des données Partie 2: Nettoyage des données à l'aide de DataFrame
Python | Ce que vous pouvez faire avec Python
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Obtenez des données supplémentaires vers LDAP avec python
Construction de pipeline de données avec Python et Luigi
INSÉRER dans MySQL avec Python [Pour les débutants]
[Note] Obtenir des données de PostgreSQL avec Python
Faisons un jeu de shiritori avec Python
Traiter les données Pubmed .xml avec python [Partie 2]
Obtenez des données alimentaires avec l'API Amazon (Python)
Essayez de travailler avec des données binaires en Python
Générer des données de test japonais avec Python Faker
Créons un groupe gratuit avec Python
Convertir des données Excel en JSON avec python
Laissez Heroku faire le traitement en arrière-plan avec Python
Téléchargez les données de cours des actions japonaises avec Python
[Introduction à Python] Utilisons foreach avec Python
Lisons le fichier RINEX avec Python ①
Manipulation des données DynamoDB avec Lambda (Node et Python)
Faisons la voix lentement avec Python
Convertissez des données FX 1 minute en données 5 minutes avec Python
Comment faire un test de sac avec python
[Python] Chapitre 04-02 Diverses structures de données (manipulation de liste)
[Python] Rendons matplotlib compatible avec le japonais
déboguer la connexion mysql avec python mysql.connector
[Python] Chapitre 04-07 Diverses structures de données (manipulation de dictionnaire)
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Organisez les données séparées par dossier avec Python