Python-OperationMysql(PyMysql)

Gängige Möglichkeiten, MySQL mit Python zu betreiben:

  • PyMysql: MySQL-Betriebsclient, geschrieben in reiner Python-Sprache, einfach zu installieren, unterstützt Python3.
  • SQLAlchemy: Es handelt sich um ein sehr leistungsfähiges ORM-Framework, das keine zugrunde liegenden Datenbankoperationen bereitstellt, hauptsächlich durch die Definition des Modells, das der Datentabellenstruktur entspricht, und das im Bereich der Python-Webprogrammierung weit verbreitet ist.

Wenn es sich in tatsächlichen Projekten nur um einen einfachen Crawler oder eine Automatisierung handelt, wird die Verwendung von PyMysql empfohlen. Andernfalls wird die Verwendung von SQLAlchemy empfohlen, das leistungsfähiger und praktischer ist.

Als nächstes verwenden Sie PyMySQL, um eine Verbindung zur MySQL-Datenbank herzustellen und einfache Hinzufügungen, Löschungen, Änderungen und Abfragen zu implementieren.

1. PyMySQL-Operation

PyMySQL ist eine Bibliothek, die zur Verbindung mit dem MySQL-Server in der Python3.x-Version verwendet wird.

1. PyMySQL-Installation

Überprüfen Sie, ob PyMySQL installiert ist:

Pip-Liste

Wenn es nicht installiert ist, verwenden Sie den Befehl pip, um PyMySQL zu installieren.

pip install PyMySQL #Installieren Sie die neueste Version

Sie müssen außerdem das Kryptografiepaket installieren:

pip installiert Kryptographie

Weil die von Python zum Herstellen einer Verbindung zur Datenbank verwendete Verschlüsselungsmethode das Kryptografiepaket erfordert. Wenn Sie die Kryptografie nicht installieren, meldet Python beim Herstellen einer Verbindung zur Datenbank einen Fehler: „RuntimeError: Das Paket „cryptography“ ist für die Authentifizierungsmethoden sha256_password oder caching_sha2_password erforderlich. Die Fehlermeldung bedeutet: Für die beiden Verschlüsselungsmethoden sha256_password und caching_sha2_password ist Kryptografie erforderlich.

2. Datenbankverbindung

Bevor wir eine Verbindung zur MySQL-Datenbank herstellen, erstellen wir eine py_db-Datenbank.

Datenbankverbindung: Verwenden Sie die Methode connect () in pymysql, um die HOST-Adresse der Datenbank, die Portnummer, den Benutzernamen, das Kennwort und den Namen der zu bedienenden Datenbank zu übergeben und das Verbindungsobjekt der Datenbank zu erhalten.

import pymysql

# 获取数据库连接
dbConn = pymysql.connect(host='localhost',
                         port=3306,
                         user='root',
                         password='***',
                         database='py_db',
                         # charset='utf8',
                         cursorclass=pymysql.cursors.DictCursor)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = dbConn.cursor()
print(cursor)  # <pymysql.cursors.DictCursor object at 0x000001D3B1768510>

# 释放资源
cursor.close()
dbConn.close()

2.1 Cursor

  • Holen Sie sich den Cursor: Verwenden Sie die Cursor()-Methode, um das Cursorobjekt über das Verbindungsobjekt abzurufen
  • Lassen Sie den Cursor los: Verwenden Sie die Methode close() des Verbindungsobjekts, um das Cursorobjekt freizugeben.

Wir können das Cursorobjekt zum Bedienen, Hinzufügen, Löschen, Ändern, Überprüfen usw. verwenden.

注意:Nachdem der Vorgang abgeschlossen ist, müssen wir die Ressourcen des Cursorobjekts und des Datenbankverbindungsobjekts freigeben.

3. Erstellen Sie eine Tabelle

Erstellen Sie eine Datenbanktabelle: Mit der Methodeexecute() können Sie eine Tabelle für die Datenbank erstellen.

注意:Die Methode „execute()“ kann Standard-SQL-Anweisungen ausführen, z. B. Tabellen erstellen, einfügen, ändern, löschen und andere Vorgänge.

import pymysql

# 获取数据库连接
dbConn = pymysql.connect(host='localhost',
                         port=3306,
                         user='root',
                         password='123456',
                         database='py_db',
                         # charset='utf8',
                         cursorclass=pymysql.cursors.DictCursor)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = dbConn.cursor()

create_table_sql = "CREATE TABLE `t_user` ( \
  `id` bigint NOT NULL AUTO_INCREMENT,\
  `user_name` varchar(145) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,\
  `pazzword` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,\
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,\
  `age` int DEFAULT NULL,\
  `birthday` date DEFAULT NULL,\
  PRIMARY KEY (`id`)\
) ENGINE=InnoDB"

# 使用 execute()  方法执行 SQL
res = cursor.execute(create_table_sql)

print(res)  # 0

# 释放资源
cursor.close()
dbConn.close()

4. Vorgang einfügen

Gängige Methoden zum Ausführen von SQL-Anweisungen in Python:

  • Methode „execute()“: Führt eine SQL-Anweisung aus.
  • Methode „executemany()“: Übergeben Sie die eingefügte SQL-Anweisung und die Positionsvariablenliste, wodurch mehrere Daten gleichzeitig eingefügt werden können.
  • commit()-Methode: Übermitteln Sie die Transaktion und übermitteln Sie die Daten an die Datenbank.
  • rowcount: Dies ist eine schreibgeschützte Eigenschaft und gibt die Anzahl der betroffenen Zeilen nach der Ausführung der Methodeexecute() zurück.

4.1 Einen Datensatz einfügen

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = dbConn.cursor()

insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES ('赵云', '123456', '男', 20, now())"

try:
   # 执行 SQL语句
   res = cursor.execute(insert_sql)
   print(res)  # 1

   # 提交事务
   dbConn.commit()
except:
   # 回滚
   dbConn.rollback()
   raise
finally:
    # 释放资源
    cursor.close()
    dbConn.close()

4.2 使用变量传递参数

Es wird empfohlen, Variablen zur Übergabe von Parametern an SQL-Anweisungen zu verwenden, um eine SQL-Injection zu verhindern.

import time
insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES ('%s', '%s', '%s', %s,  '%s')" % \
       ('赵云2', '123456', '男', 18, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

try:
   # 执行 SQL语句
   res = cursor.execute(insert_sql)
   print(res)  # 1

   # 提交事务
   dbConn.commit()
except:
   # 回滚
   dbConn.rollback()
   raise
finally:
    # 释放资源
    cursor.close()
    dbConn.close()

4.3 Mehrere Datensätze einfügen

import time
insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES (%s, %s, %s, %s, %s)"

insert_datas = [
    ("赵子龙1", "123456", "男", 18, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())),
    ("赵子龙2", "123456", "男", 19, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())),
    ("赵子龙3", "123456", "男", 20, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))]

try:
   # 执行 SQL语句
   # res = cursor.execute(insert_sql)
   res = cursor.executemany(insert_sql, insert_datas)
   print(res)  # 3

   # 提交事务
   dbConn.commit()
except:
   # 回滚
   dbConn.rollback()
   raise
finally:
    # 释放资源
    cursor.close()
    dbConn.close()

注意:PyMysql behandelt die Parameterwerte aller Felder in der SQL-Anweisung als Zeichenfolgentypen.

5. Update-Vorgang

Ähnlich wie beim Einfügevorgang müssen Sie nur die SQL-Anweisung ändern. Es wird empfohlen, Variablen zum Übergeben von Parametern zu verwenden.

update_sql = 'UPDATE `t_user` SET `user_name` = %s, `pazzword` = %s, `sex` = %s, `age` = %s WHERE `id` = %s'
update_datas = ("安琪拉", "123456", "女", 18, 2)

try:
   # 执行 SQL语句
   res = cursor.execute(update_sql, update_datas)
   print(res)  # 1
    
    # 提交事务
   dbConn.commit()
...

6. Vorgang löschen

Ähnlich wie beim Einfügevorgang müssen Sie nur die SQL-Anweisung ändern. Es wird empfohlen, Variablen zum Übergeben von Parametern zu verwenden.

delete_sql = 'DELETE FROM `t_user` WHERE `id` = %s'
delete_datas = [(1),(2)]

try:
   # 执行 SQL语句
   res = cursor.executemany(delete_sql, delete_datas)
   print(res)  # 2

   # 提交事务
   dbConn.commit()
...    

2. Abfragevorgang

Gängige Methoden zum Abfragen von Datenbanken in Python:

  • fetchone()-Methode: Gibt die Ergebnismenge eines einzelnen Datensatzes zurück, und die Ergebnismenge ist ein Objekt.
  • fetchall()-Methode: Gibt die Ergebniszeilen aller Datensätze zurück und die Ergebnismenge ist eine Liste.
  • rowcount: Dies ist eine schreibgeschützte Eigenschaft und gibt die Anzahl der betroffenen Zeilen nach der Ausführung der Methodeexecute() zurück.

1. Fragen Sie einen einzelnen Datensatz ab

select_sql = "SELECT * FROM `t_user` WHERE id = %s "
select_datas = (5)
try:
    # 执行 SQL语句
    cursor.execute(select_sql, select_datas)
    res = cursor.fetchone()
    print(res) # {'id': 5, 'user_name': '赵子龙1', 'pazzword': '123456', 'sex': '男', 'age': 18, 'birthday': datetime.date(2023, 2, 13)}
except:
   raise
finally:
    # 释放资源
    cursor.close()
    dbConn.close()

2. Fragen Sie mehrere Datensätze ab

select_sql = "SELECT * FROM `t_user` WHERE id >= %s AND sex = %s"
select_datas = (5, "男")
try:
    # 执行 SQL语句
    cursor.execute(select_sql, select_datas)
    res = cursor.fetchmany(5)
    for row in res:
        id = row['id']
        username = row['user_name']
        pazzword = row['pazzword']
        sex = row['sex']
        age = row['age']
        birthday = row['birthday']

        # 打印结果
        print(row)
        print("id=%s,username=%s,pazzword=%s,sex=%s,age=%s,birthday=%s" % \
              (id, username, pazzword, sex, age, birthday))
except:
   raise
finally:
    # 释放资源
    cursor.close()
    dbConn.close()

Fügen Sie hier eine Bildbeschreibung ein

3. Transaktionsmechanismus

1. Transaktionsmechanismus

Transaktionen sollten vier Attribute haben: Atomizität, Konsistenz, Isolation und Haltbarkeit. Diese vier Eigenschaften werden oft als ACID-Eigenschaften bezeichnet.

  • Atomarität. Eine Transaktion ist eine unteilbare Arbeitseinheit, und alle in der Transaktion enthaltenen Vorgänge werden entweder ausgeführt oder nicht ausgeführt.
  • Konsistenz. Eine Transaktion muss die Datenbank von einem konsistenten Zustand in einen anderen ändern. Konsistenz und Atomizität hängen eng zusammen.
  • Isolation. Die Ausführung einer Transaktion kann nicht durch andere Transaktionen beeinträchtigt werden. Das heißt, die innerhalb einer Transaktion verwendeten Vorgänge und Daten sind von anderen gleichzeitigen Transaktionen isoliert und die gleichzeitig ausgeführten Transaktionen können sich nicht gegenseitig stören.
  • Haltbarkeit. Persistenz, auch Permanenz genannt, bedeutet, dass die Änderungen an den Daten in der Datenbank dauerhaft sein sollten, sobald eine Transaktion festgeschrieben wurde. Nachfolgende andere Vorgänge oder Ausfälle sollten keine Auswirkungen darauf haben.

2. Transaktionsvorgang

Bei Datenbanken, die Transaktionen unterstützen, wird bei der Python-Datenbankprogrammierung beim Erstellen eines Cursors automatisch eine unsichtbare Datenbanktransaktion gestartet.

  • commit()-Methode: Alle Operationen am aktuellen Cursor ausführen.
  • rollback()-Methode: Rollback aller Vorgänge des aktuellen Cursors.

Daher sollten die oben genannten Vorgänge zum Hinzufügen, Löschen, Ändern und Abfragen leicht verständlich sein.

– Wenn Sie wissensdurstig sind, seien Sie demütig, wenn Sie dumm sind.

Ich denke du magst

Origin blog.csdn.net/qq_42402854/article/details/129019012
Empfohlen
Rangfolge