Mysql
 sql >> Base de données >  >> RDS >> Mysql

Python se connecte à la base de données MySQL avec le connecteur MySQL et l'exemple PyMySQL

Lorsque vous souhaitez vous connecter à la base de données MySQL en code Python, vous pouvez utiliser à la fois le mysql-connector-python Pilote MySQL et PyMySQL . Le mysql-connector-python Le pilote MySQL est un pilote intégré au serveur MySQL et le PyMySQL est une bibliothèque tierce.

Toutes les deux bibliothèques python MySQL fournissent des classes pour vous permettre d'obtenir une connexion à la base de données MySQL, d'exécuter l'insertion, la suppression, la mise à jour, la sélection de la commande SQL. Ils prennent également en charge la gestion des transactions. Cet article vous montrera un exemple d'utilisation de mysql-connector-python et PyMySQL pour fonctionner sur la table de la base de données MySQL.

1. Comment utiliser mysql-connector-python pour faire fonctionner la base de données MySQL.

1.1 Installer la bibliothèque mysql-connector-python.

  1. Le mysql-connector-python bibliothèque peut être installée lorsque vous installez la base de données MySQL.
  2. Vous pouvez donc exécuter la commande pip show mysql-connector-python pour vérifier s'il a été installé ou non.
    $ pip show mysql-connector-pythonATTENTION :Paquet(s) introuvable(s) :mysql-connector-python
  3. Si le mysql-connector-python la bibliothèque n'est pas installée, vous pouvez exécuter la commande pip install mysql-connector-python pour l'installer.
    $ pip install mysql-connector-pythonCollecte de mysql-connector-python Téléchargement de mysql_connector_python-8.0.25-py2.py3-none-any.whl (319 ko) |█████████ ███████████████████████| 319 Ko 219 Ko/s Collecte de protobuf>=3.0.0 Téléchargement de protobuf-3.17.0-cp37-cp37m-macosx_10_9_x86_64.whl (959 Ko) |█████████████████ ██████████████| 959 Ko 727 Ko/s Exigence déjà satisfaite :six>=1.9 dans /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (depuis protobuf>=3.0.0->mysql-connector -python) (1.15.0)Installation des packages collectés :protobuf, mysql-connector-pythonInstallé avec succès mysql-connector-python-8.0.25 protobuf-3.17.0
  4. Maintenant, lorsque vous exécutez la commande pip show mysql-connector-python encore une fois, vous pouvez obtenir ses informations d'installation. /connector-python/en/index.htmlAuteur :Oracle et/ou ses sociétés affiliéesAuteur-email :UNKNOWNLicense :GNU GPLv2 (with FOSS License Exception)Location :/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7 /site-packagesRequires :protobufRequired-by :

1.2 Utilisez mysql-connector-python pour vous connecter à la base de données MySQL.

  1. Importer le mysql.connector class.
    importer mysql.connector
  2. Appelez mysql.connector.connect() méthode pour se connecter au serveur de base de données MySQL. ', use_unicode=True):conn =mysql.connector.connect(user=user, password=password, host=host, port=port, database=database, use_unicode=use_unicode) return conn

1.3 Exécuter une instruction DDL pour créer une table.

  1. Obtenir le curseur de la base de données MySQL.
    cursor =conn.cursor()
  2. Exécutez l'instruction DDL. Si vous souhaitez exécuter plusieurs instructions DDL à la fois, vous devez séparer chaque instruction DDL par un point-virgule et vous devez ajouter le multi=True
    paramètre du execute() de l'objet curseur , sinon elle renverra l'erreur mysql.connector.errors.InterfaceError :Utilisez multi=True lors de l'exécution de plusieurs instructions .

    def execute_ddl(conn):cursor =conn.cursor() # Le DDL ci-dessous supprimera d'abord la table si elle existe, puis créera la table. ddl_sql=''' DROP TABLE user_account ; CREATE TABLE `dev2qa_example`.`user_account` ( `id` INT NOT NULL AUTO_INCREMENT, `user_name` VARCHAR(45) NULL, `password` VARCHAR(45) NULL, `email` VARCHAR(45) NULL, PRIMARY KEY (`id `) ); ''' # Parce que le DDL ci-dessus contient 2 instructions (drop, create), il faut donc ajouter le paramètre multi=True pour éviter l'erreur mysql.connector.errors.InterfaceError :Utilisez multi=True lors de l'exécution de plusieurs instructions. curseur.execute(ddl_sql, multi=True) curseur.close() conn.close() print(ddl_sql + 'exécuter avec succès.')

1.4 Exécuter l'instruction DML (Insérer, Mettre à jour, Supprimer).

  1. Obtenir l'objet curseur de connexion à la base de données MySQL.
  2. Exécutez l'instruction SQL d'insertion, de mise à jour et de suppression avec l'objet curseur execute() method.
    def execute_dml(conn):cursor =conn.cursor() dml_insert =''' INSERT INTO `dev2qa_example`.`user_account` VALUES (null, %s, %s, %s); ''' curseur.execute(dml_insert, ('tom', 'tom12345678', '[email protected]')) conn.commit() curseur.close() conn.close()
  3. Si vous souhaitez insérer plusieurs lignes dans la table MySQL, vous pouvez exécuter le executemany() de l'objet curseur method.
    def execute_dml_insert_many(conn):curseur =conn.cursor() dml_insert =''' INSERT INTO `dev2qa_example`.`user_account` VALUES (null, %s, %s, %s); ''' row_tuple =(('richard', 'richard', '[email protected]'), ('atout', 'atout', '[email protected]'),('docteur', 'docteur' , '[email protected]')) cursor.executemany(dml_insert, row_tuple) conn.commit() cursor.close() conn.close()

1.5 Exécuter l'instruction SQL de sélection DML.

  1. Exécuter le execute() de l'objet curseur méthode pour exécuter l'instruction SQL select. curseur.execute(dml_select) # affiche l'en-tête de la ligne. pour col dans le curseur.description :print(col[0], end='\t') print('\n------------------------ -----') # affiche les données de chaque ligne. pour la ligne dans le curseur :print(row) print(row[1] + '--->' + row[2]) cursor.close() conn.close()

2. Comment utiliser PtMySQL pour exploiter la base de données MySQL.

2.1 Installer PyMySQL.

  1. Avant de pouvoir utiliser PyMySQL, vous devez d'abord l'installer. Vous pouvez utiliser pip pour installer comme ci-dessous.
    $ pip3 install PyMySQL
  2. Vous pouvez exécuter pip3 show commande pour vérifier l'installation de PyMySQL.
    $ pip3 show PyMySQL

2.2 Utiliser PyMySQL pour se connecter et exploiter la base de données MySQL.

Vous trouverez ci-dessous les étapes à suivre pour utiliser la bibliothèque PyMySQL dans le code Python.

  1. Importer la connexion PyMSQL , curseurs class.
    depuis pymysql import connect, curseurs
  2. Appeler connect méthode pour obtenir l'objet de connexion à la base de données MySQL.
    conn =connect(host=host, user=user, password=password, db=db, charset=charset, cursorclass=cursorclass)
  3. Obtenir l'objet curseur de la base de données par la fonction curseur() de l'objet de connexion.
    conn.cursor() comme curseur :
  4. Exécutez l'instruction SQL en utilisant l'objet curseur.
    cursor.execute(sql)
  5. Si l'instruction sql est une instruction select, appelez la méthode fetchall() ou fetchone() de l'objet curseur pour obtenir le résultat de l'exécution sql. Veuillez noter qu'après avoir invoqué fetchall(), le curseur se déplacera vers la dernière ligne du résultat, donc si vous appelez à nouveau la méthode fetchall(), aucune ligne ne sera renvoyée.
    row =curseur.fetchall() ou ligne =curseur .fetchone()
  6. Si l'instruction sql est une instruction d'insertion, de mise à jour, de suppression, appelez la fonction commit() de l'objet de connexion pour valider les modifications apportées à la base de données MySQL.
    conn.commit()
  7. N'oubliez pas de fermer l'objet de connexion à la base de données MySQL à la fin pour libérer les ressources de la base de données.
    si conn n'est pas None :conn.close() conn =None

2.3 Exemple de base de données MySQL avec PyMySQL.

  1. Dans cet exemple, le nom de la base de données MySQL est dev2qa_example , le nom de la table est user_account . Le tableau comporte quatre colonnes qui sont id , nom_utilisateur , mot de passe, et e-mail . La colonne id est auto-incrémentée.
  2. Le code source python contient des méthodes pour insérer, mettre à jour, supprimer et sélectionner les données de compte utilisateur comme ci-dessous.
    depuis pymysql import connect, cursorsglobal_host='127.0.0.1'global_user='jerry'global_password='jerry'global_db='dev2qa_example'global_charset='utf8'global_cursorclass=cursors.DictCursor# get mysql connection object.def open_mysql_connection(host='127.0.0.1', user='jerry', password='jerry', db='dev2qa_example', charset='utf8', cursorclass=cursors.DictCursor):conn =connect(host=host, user=user, password=password, db=db, charset=charset, cursorclass=cursorclass) return conn # fermer la connexion mysql. def close_mysql_connection(conn):si conn n'est pas None:conn.close() conn =None# execute insert, update or delete sql command.def execute_insert_update_delete_sql(sql, host, user, password, db, charset, cursorclass):execute_row_count =0 conn =None print('sql =' + sql) try:if string_is_not_empty(sql):conn =open_mysql_connection(host, user, password, db, charset, cursorclass) avec conn.cursor() comme curseur :execute_row_count =curseur. execute(sql) except Exception as ex:print(ex) finally:if conn is not None:conn.commit() close_mysql_connection(conn) return execute_row_count # execute select sql command. def execute_select_sql(sql, host, user, password, db, charset, cursorclass):ret =list() conn =None print('sql =' + sql) try:if string_is_not_empty(sql):conn =open_mysql_connection(host, user , mot de passe, base de données, jeu de caractères, classe de curseur) avec conn.cursor() comme curseur :row_count =cursor.execute(sql) print('select return row count =' + str(row_count)) row =cursor.fetchall() print( row) ret.append(row) except Exception as ex:print(ex) finally:if conn is not None:close_mysql_connection(conn) return ret # insert user account to database table dev2qa_example.user_account. def insert_user_account(user_name, password, email):print('***********Begin insert_user_account.***********') if string_is_not_empty(user_name) and string_is_not_empty(password) and string_is_not_empty (email):# vérifiez d'abord si le compte utilisateur existe ou non. sql ="select count(id) as count from dev2qa_example.user_account where lower(user_name) ='"+user_name.lower().strip()+"'" row_list =execute_select_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) account_exist =False for row in row_list :for column in row :exist_count_number =column.get('count') if exist_count_number> 0 :account_exist =True if not account_exist :print('User ' + user_name + ' do not existent dans la base de données. Insérez le compte d'utilisateur dans la table de la base de données.') sql ="insert into user_account(user_name, password, email) values('"+user_name+"','"+password+"','"+email+"') " insert_row_count =execute_insert_update_delete_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) print('Insert ' + str(insert_row_count) + ' données de ligne avec succès.') else :print('Le compte utilisateur existe, impossible d'insérer.') else :print('nom_utilisateur, mot de passe, e-mail ne peut pas être vide.') print('***********Fin insert_user_account.** ********') # mettre à jour les données du compte utilisateur. def update_user_account(user_name, password, email):print('***********Begin update_user_account.***********') if string_is_not_empty(user_name):sql ="update dev2qa_example. user_account set password ='" + password + "', email ='" + email + "' where lower(user_name) ='" + user_name.lower() + "'" update_row_count =execute_insert_update_delete_sql(sql, global_host, global_user, global_password , global_db, global_charset, global_cursorclass) if update_row_count ==0 :print('Le compte d'utilisateur n'existe pas, insérez-le maintenant.') insert_user_account(user_name, password, email) else :print('Update ' + str(update_row_count) + ' données de ligne avec succès.') else :print('user_name ne peut pas être vide.') print('***********End update_user_account.***********') # supprimer l'utilisateur données de compte de la table de base de données. def delete_user_account(user_name):print('***********Begin delete_user_account.***********') if string_is_not_empty(user_name):sql ="delete from dev2qa_example.user_account where lower (user_name) ='"+user_name.lower()+"'" delete_row_count =execute_insert_update_delete_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) print('Delete ' + str(delete_row_count) + ' row data avec succès. ') print('***********End delete_user_account.***********') # exécutez la commande select sql pour obtenir les données du compte utilisateur par nom_utilisateur. def get_user_account_by_user_name(user_name):print('***********Begin get_user_account_by_user_name.***********') sql ="select * from dev2qa_example.user_account where lower(user_name) =' "+user_name.lower().strip()+"'" row_list =execute_select_sql(sql, global_host, global_user, global_password, global_db, global_charset, global_cursorclass) print('***********End get_user_account_by_user_name.* *********')# vérifie si la chaîne est vide ou non.def string_is_not_empty(str) :si str vaut None :renvoie False elif len(str.strip()) ==0 :renvoie False sinon :return Trueif __name__ =='__main__':# première suppression du compte utilisateur jerry. delete_user_account('jerry') # puis insérez un compte utilisateur jerry dans la base de données. insert_user_account('jerry', 'jerry', '[email protected]') # affiche les données du compte utilisateur pour vérifier l'action d'insertion. get_user_account_by_user_name('jerry') # mettre à jour les informations du compte usr. update_user_account('jerry', 'jerry888', '[email protected]') # vérifiez à nouveau les informations de compte utilisateur mises à jour. get_user_account_by_user_name('jerry')
  3. Vous trouverez ci-dessous le résultat d'exécution du code ci-dessus.
    ***********Commencez delete_user_account.***********sql =supprimer de dev2qa_example.user_account où lower(user_name) ='jerry'Suppression des données de la ligne 1 avec succès.***********End delete_user_account.********************Begin insert_user_account.***** *****sql =select count(id) as count from dev2qa_example.user_account where lower(user_name) ='jerry'select return row count =1[{'count':0}]L'utilisateur jerry n'existe pas dans la base de données. Insérez le compte d'utilisateur dans la base de données table.sql =insert into user_account(user_name, password, email) values('jerry','jerry','[email protected]') Insérez 1 ligne de données avec succès.****** ****End insert_user_account.********************Begin get_user_account_by_user_name.***********sql =select * from dev2qa_example.user_account où inférieur (user_name) ='jerry'select return row count =1[{'id':42, 'user_name':'jerry', 'password':'jerry', 'email':'[email protected]'}] **********Fin get_user_account_by_user_name.********************Commencez update_user_account.***********sql =update dev2qa_example .user_account set password ='jerry888', email ='[email protected]' where lower(user_name) ='jerry'Mettre à jour les données de la ligne 1 avec succès.***********End update_user_account.**** ****************Commencez get_user_account_by_user_name.***********sql =select * from dev2qa_example.user_account where lower(user_name) ='jerry'select return row count =1[{'id':42, 'user_name':'jerry', 'password':'jerry888', 'email ':'[email protected]'}]***********Fin get_user_account_by_user_name.***********

Références

  1. Comment utiliser MySql sur Mac