Python MySQL - mysql-connector-Treiber

MySQL ist das beliebteste relationale Datenbankverwaltungssystem. Wenn Sie mit MySQL nicht vertraut sind, können Sie unserMySQL-Tutorial lesen.

Dieses Kapitel stellt die Verwendung vonmysql-connectorzum Verbinden mit und Verwenden von MySQL vor,mysql-connectorJaMySQLder offiziell bereitgestellte Treiber.

Wir können denpip-Befehl verwenden, ummysql-connector zu installieren:

python -m pip install mysql-connector

Verwenden Sie den folgenden Code, um zu testen, ob mysql-connector erfolgreich installiert wurde:

demo_mysql_test.py:

import mysql.connector

Führen Sie den obigen Code aus. Wenn keine Fehler auftreten, war die Installation erfolgreich.

HinweisHinweis:Wenn Ihr MySQL die Version 8.0 ist, hat sich die Authentifizierungsmethode des Passwort-Plugins geändert. Die frühere Version verwendete mysql_native_password, und Version 8.0 verwendet caching_sha2_password, daher müssen einige Änderungen vorgenommen werden:

Ändern Sie zuerst die my.ini-Konfiguration:

[mysqld]
default_authentication_plugin=mysql_native_password

Führen Sie dann die folgenden Befehle unter MySQL aus, um das Passwort zu ändern:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

Weitere Informationen finden Sie unter:Python MySQL 8.0-Verbindungsproblem。


Erstellen einer Datenbankverbindung

Sie können den folgenden Code verwenden, um eine Verbindung zur Datenbank herzustellen:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", # Hostadresse der Datenbank user="yourusername", # Datenbank-Benutzername passwd="yourpassword" # Datenbank-Passwort ) print(mydb)

Erstellen einer Datenbank

Um eine Datenbank zu erstellen, verwenden Sie die Anweisung "CREATE DATABASE". Das Folgende erstellt eine Datenbank namens example_db:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456" ) mycursor = mydb.cursor() mycursor.execute("CREATE DATABASE example_db")

Bevor wir eine Datenbank erstellen, können wir auch die Anweisung "SHOW DATABASES" verwenden, um zu prüfen, ob die Datenbank existiert:

demo_mysql_test.py:

Geben Sie die Liste aller Datenbanken aus:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456" ) mycursor = mydb.cursor() mycursor.execute("SHOW DATABASES") for x in mycursor: print(x)

Alternativ können wir uns direkt mit der Datenbank verbinden. Wenn die Datenbank nicht existiert, wird eine Fehlermeldung ausgegeben:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" )

Erstellen einer Datentabelle

Um eine Datentabelle zu erstellen, verwenden Sie die"CREATE TABLE"Anweisung. Bevor Sie eine Datentabelle erstellen, müssen Sie sicherstellen, dass die Datenbank bereits existiert. Das Folgende erstellt einesitesDatentabelle:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
Nach erfolgreicher Ausführung können wir die in der Datenbank erstellte Datentabelle sites sehen, mit den Feldern name und url.

Wir können auch die"SHOW TABLES"Anweisung verwenden, um zu prüfen, ob die Datentabelle bereits existiert:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SHOW TABLES") for x in mycursor: print(x)

Einrichtung des Primärschlüssels

Wenn wir eine Tabelle erstellen, legen wir im Allgemeinen einen Primärschlüssel (PRIMARY KEY) fest. Wir können die"INT AUTO_INCREMENT PRIMARY KEY"Anweisung verwenden, um einen Primärschlüssel zu erstellen. Der Primärschlüssel beginnt bei 1 und wird schrittweise erhöht.

Wenn unsere Tabelle bereits erstellt wurde, müssen wirALTER TABLEverwenden, um der Tabelle einen Primärschlüssel hinzuzufügen:

demo_mysql_test.py:

Fügen Sie der Tabelle sites einen Primärschlüssel hinzu.

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

Wenn Sie die Tabelle sites noch nicht erstellt haben, können Sie den folgenden Code direkt verwenden, um sie zu erstellen.

demo_mysql_test.py:

Erstellen Sie einen Primärschlüssel für die Tabelle.

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")

Daten einfügen

Um Daten einzufügen, verwenden Sie die"INSERT INTO"Anweisung:

demo_mysql_test.py:

Fügen Sie einen Datensatz in die Tabelle sites ein.

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = ("EXAMPLE", "https://www.example.com") mycursor.execute(sql, val) mydb.commit() # Der Inhalt der Datentabelle wurde aktualisiert; diese Anweisung muss verwendet werden print(mycursor.rowcount, "Der Datensatz wurde erfolgreich eingefügt.")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1 记录插入成功

Batch-Einfügen

Für das Batch-Einfügen verwenden Sie dieexecutemany()Methode. Der zweite Parameter dieser Methode ist eine Liste von Tupeln, die die Daten enthält, die wir einfügen möchten:

demo_mysql_test.py:

Mehrere Datensätze in die Tabelle sites einfügen.

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = [ ('Google', 'https://www.google.com'), ('Github', 'https://www.github.com'), ('Taobao', 'https://www.taobao.com'), ('stackoverflow', 'https://www.stackoverflow.com/') ] mycursor.executemany(sql, val) mydb.commit() # Der Inhalt der Datentabelle wurde aktualisiert; diese Anweisung muss verwendet werden print(mycursor.rowcount, "Die Datensätze wurden erfolgreich eingefügt.")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

4 记录插入成功。

Nachdem der obige Code ausgeführt wurde, können wir uns die Datensätze in der Datentabelle ansehen:

Wenn wir die ID des Datensatzes nach dem Einfügen der Daten abrufen möchten, können wir den folgenden Code verwenden:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "INSERT INTO sites (name, url) VALUES (%s, %s)" val = ("Zhihu", "https://www.zhihu.com") mycursor.execute(sql, val) mydb.commit() print("1 Datensatz eingefügt, ID:", mycursor.lastrowid)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1 条记录已插入, ID: 6

Daten abfragen

Um Daten abzufragen, verwenden Sie dieSELECTAnweisung:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SELECT * FROM sites") myresult = mycursor.fetchall() # fetchall() ruft alle Datensätze ab for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(1, 'EXAMPLE', 'https://www.example.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(6, 'Zhihu', 'https://www.zhihu.com')

Du kannst auch Daten aus bestimmten Feldern lesen:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SELECT name, url FROM sites") myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

('EXAMPLE', 'https://www.example.com')
('Google', 'https://www.google.com')
('Github', 'https://www.github.com')
('Taobao', 'https://www.taobao.com')
('stackoverflow', 'https://www.stackoverflow.com/')
('Zhihu', 'https://www.zhihu.com')

Wenn wir nur einen Datensatz lesen möchten, können wir diefetchone()-Methode verwenden:

demo_mysql_test.py:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SELECT * FROM sites") myresult = mycursor.fetchone() print(myresult)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(1, 'EXAMPLE', 'https://www.example.com')

WHERE-Bedingungsanweisung

Wenn wir Daten mit bestimmten Bedingungen lesen möchten, können wir diewhere-Anweisung verwenden:

demo_mysql_test.py

Lesen Sie Datensätze, bei denen das Feld name EXAMPLE ist:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "SELECT * FROM sites WHERE name ='EXAMPLE'" mycursor.execute(sql) myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(1, 'EXAMPLE', 'https://www.example.com')

Sie können auch Wildcards verwenden%:

demo_mysql_test.py

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "SELECT * FROM sites WHERE url LIKE '%oo%'" mycursor.execute(sql) myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(1, 'EXAMPLE', 'https://www.example.com')
(2, 'Google', 'https://www.google.com')

Um SQL-Injection-Angriffe bei Datenbankabfragen zu verhindern, können wir einen%sPlatzhalter verwenden, um die Abfragebedingungen zu escapen:

demo_mysql_test.py

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "SELECT * FROM sites WHERE name = %s" na = ("EXAMPLE", ) mycursor.execute(sql, na) myresult = mycursor.fetchall() for x in myresult: print(x)

Sortierung

Abfrageergebnisse können mit derORDER BY-Anweisung sortiert werden. Die Standard-Sortiermethode ist aufsteigend, mit dem SchlüsselwortASC. Wenn Sie eine absteigende Sortierung festlegen möchten, können Sie das SchlüsselwortDESC setzen。

demo_mysql_test.py

In aufsteigender Reihenfolge nach den Buchstaben des name-Feldes sortieren:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "SELECT * FROM sites ORDER BY name" mycursor.execute(sql) myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(3, 'Github', 'https://www.github.com')
(2, 'Google', 'https://www.google.com')
(1, 'EXAMPLE', 'https://www.example.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(4, 'Taobao', 'https://www.taobao.com')
(6, 'Zhihu', 'https://www.zhihu.com')

Beispiel für absteigende Sortierung:

demo_mysql_test.py

In absteigender Reihenfolge nach den Buchstaben des name-Feldes sortieren:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "SELECT * FROM sites ORDER BY name DESC" mycursor.execute(sql) myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(6, 'Zhihu', 'https://www.zhihu.com')
(4, 'Taobao', 'https://www.taobao.com')
(5, 'stackoverflow', 'https://www.stackoverflow.com/')
(1, 'EXAMPLE', 'https://www.example.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')

Grenzwert

Wenn wir die Menge der abzufragenden Daten festlegen möchten, können wir die"LIMIT"-Anweisung verwenden, um sie anzugeben

demo_mysql_test.py

Die ersten 3 Datensätze lesen:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SELECT * FROM sites LIMIT 3") myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(1, 'EXAMPLE', 'https://www.example.com')
(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')

Sie können auch die Startposition angeben. Das verwendete Schlüsselwort istOFFSET:

demo_mysql_test.py

Die ersten 3 Datensätze beginnend mit dem zweiten Datensatz lesen:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() mycursor.execute("SELECT * FROM sites LIMIT 3 OFFSET 1") # 0 ist der erste, 1 ist der zweite, und so weiter myresult = mycursor.fetchall() for x in myresult: print(x)

Führen Sie den Code aus, und das Ausgabeergebnis ist:

(2, 'Google', 'https://www.google.com')
(3, 'Github', 'https://www.github.com')
(4, 'Taobao', 'https://www.taobao.com')

Datensatz löschen

Um Datensätze zu löschen, verwenden Sie die"DELETE FROM"Anweisung:

demo_mysql_test.py

Löschen Sie Datensätze, bei denen name stackoverflow ist:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "DELETE FROM sites WHERE name = 'stackoverflow'" mycursor.execute(sql) mydb.commit() print(mycursor.rowcount, "Datensatz(en) gelöscht")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1  条记录删除

Hinweis:Verwenden Sie die DELETE-Anweisung mit Vorsicht. Stellen Sie sicher, dass die WHERE-Bedingung in der DELETE-Anweisung angegeben ist, andernfalls werden alle Daten in der Tabelle gelöscht.

Um SQL-Injection-Angriffe in Datenbankabfragen zu verhindern, können wir%sPlatzhalter verwenden, um die Bedingungen der DELETE-Anweisung zu maskieren:

demo_mysql_test.py

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "DELETE FROM sites WHERE name = %s" na = ("stackoverflow", ) mycursor.execute(sql, na) mydb.commit() print(mycursor.rowcount, "Datensatz(en) gelöscht")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1  条记录删除

Tabellendaten aktualisieren

Um eine Datentabelle zu aktualisieren, verwenden Sie die"UPDATE"Anweisung:

demo_mysql_test.py

Ändern Sie die Felddaten mit dem Namen Zhihu in ZH:

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "UPDATE sites SET name = 'ZH' WHERE name = 'Zhihu'" mycursor.execute(sql) mydb.commit() print(mycursor.rowcount, "Datensatz/Datensätze geändert")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1  条记录被修改

Hinweis:Stellen Sie sicher, dass die UPDATE-Anweisung eine WHERE-Bedingung angibt, andernfalls werden alle Daten in der Tabelle aktualisiert.

Um SQL-Injection-Angriffe in Datenbankabfragen zu verhindern, können wir den %s-Platzhalter verwenden, um die Bedingungen der UPDATE-Anweisung zu maskieren:

demo_mysql_test.py

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "UPDATE sites SET name = %s WHERE name = %s" val = ("Zhihu", "ZH") mycursor.execute(sql, val) mydb.commit() print(mycursor.rowcount, "Datensatz/Datensätze geändert")

Führen Sie den Code aus, und das Ausgabeergebnis ist:

1  条记录被修改

Tabelle löschen

Um eine Tabelle zu löschen, verwenden Sie die"DROP TABLE"Anweisung.IF EXISTSDas Schlüsselwort wird verwendet, um festzustellen, ob die Tabelle existiert, und sie wird nur gelöscht, wenn sie existiert:

demo_mysql_test.py

import mysql.connector mydb = mysql.connector.connect( host="localhost", user="root", passwd="123456", database="example_db" ) mycursor = mydb.cursor() sql = "DROP TABLE IF EXISTS sites" # Datentabelle sites löschen mycursor.execute(sql)
Andere Erweiterungen