Utilisation de pymysql en Python pour la gestion de base de données

Procédure d'utilisation

Pour interagir avec une base de données MySQL via Python, suivez cette séquence : établir une connnexion → créer un curseur → exécuter des requêtes...

# Installation du module : pip3 install pymysql
import pymysql

# Établissement de la connexion à la base de données
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    database="day35",
    user="root",
    password="123456"
)

# Création d'un curseur pour exécuter les requêtes
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# Utilisation de DictCursor permet d'obtenir les résultats sous forme de dictionnaires

rows = cursor.execute("SELECT * FROM ttt;")
print(rows)

result = cursor.fetchall()  # Récupération de tous les enregistrements
print(result)

cursor.close()
conn.close()

Insertion de plusieurs enregistrements

import pymysql

# Connexion à la base de données
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,
    database="day35",
    user="root",
    password="123456"
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# Suppression et création de la table 'sites'
cursor.execute('DROP TABLE IF EXISTS sites')
cursor.execute('CREATE TABLE sites(name VARCHAR(20) PRIMARY KEY, url VARCHAR(200))')

# Insertion multiple d'enregistrements
sql = "INSERT INTO sites(name, url) VALUES (%s, %s)"
data = [
    ("Google", "https://www.google.com"),
    ("Github", "https://www.github.com"),
    ("Taobao", "https://www.taobao.com")
]

cursor.executemany(sql, data)

# Validation de la transaction
conn.commit()
print(cursor.rowcount, "enregistrements insérés avec succès")

# Fermeture du curseur
cursor.close()

# Requête pour afficher les données insérées
cursor = conn.cursor()
cursor.execute('SELECT * FROM sites')
records = cursor.fetchall()
for record in records:
    print(record)

# Fermeture finale
cursor.close()
conn.close()

Encapsulation dans une fonction

Voici un exemple de fonction pour insérer des données dans une base de données :

import pymysql

def insert_data(entry_dict: dict):
    """
    Insère un enregistrement dans la base de données.
    
    Args:
        entry_dict (dict): Dictionnaire contenant les valeurs à insérer.
    """
    db = pymysql.connect(
        host="192.168.49.160",
        port=3306,
        database="day01",
        user="liqi",
        password="liqi123456"
    )
    cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

    # Préparation de la requête SQL
    sql = "INSERT INTO t1(test_type, produce_name) VALUES (%s, %s)"
    
    # Extraction des valeurs depuis le dictionnaire
    test_type = entry_dict.get('test_type')
    produce_name = entry_dict.get('produce_name')

    # Données à insérer
    values = [test_type, produce_name]
    
    try:
        cursor.execute(sql, values)
        db.commit()
    except:
        db.rollback()

    print(cursor.rowcount, "enregistrements insérés")
    cursor.close()

if __name__ == '__main__':
    data = {
        'test_type': 'gemm',
        'produce_name': "Liqi1234"
    }
    insert_data(data)

Récupération du dernier enregistrement inséré

Voici comment récupérer le dernier enregistrement après une insertion :

import pymysql

def insert_and_fetch_last(entry_dict: dict):
    """
    Insère un enregistrement puis récupère le dernier ajouté.
    """
    db = pymysql.connect(
        host="192.168.49.160",
        port=3306,
        database="day01",
        user="liqi",
        password="liqi123456"
    )
    cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

    # Requête d'insertion
    sql = "INSERT INTO t1(test_type, produce_name) VALUES (%s, %s)"
    test_type = entry_dict.get('test_type')
    produce_name = entry_dict.get('produce_name')
    
    values = [test_type, produce_name]
    
    try:
        cursor.execute(sql, values)
        db.commit()
    except:
        db.rollback()

    print(cursor.rowcount, "enregistrements insérés")

    # Récupération du dernier enregistrement inséré
    last_id = cursor.lastrowid - 1  # Ajustement pour l'index
    
    cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
    select_query = "SELECT * FROM t1"
    cursor.execute(select_query)
    cursor.scroll(last_id, mode="absolute")
    
    latest_record = cursor.fetchone()
    print(latest_record)
    
    cursor.close()

if __name__ == '__main__':
    data = {
        'test_type': 'gemm',
        'produce_name': "Liqi1234"
    }
    insert_and_fetch_last(data)

Références : Ouvrage « Python Interview Guide » par Yuan Yuan Home – Chapitre 5 : Base de données.

Étiquettes: PyMySQL Python base de données MySQL requêtes SQL

Publié le 5 août à 17h42