Heim > Artikel > Backend-Entwicklung > Betreiben Sie die MySQL-Datenbank über Python
1. Grundlegende Datenbankoperationen
1. Wenn Sie das Schreiben von Chinesisch in der Datenbank zulassen möchten, können Sie beim Erstellen der Datenbank den folgenden Befehl verwenden
CREATE database zcl charset utf8;
2. Sehen Sie sich die Tabellenstruktur der Schüler an
desc students;
3. Sehen Sie sich die Anweisungen an, die die Tabellenstruktur der Schüler erstellen
show create table students;
4. Löschen Sie die Datenbank
drop database zcl;
5. Erstellen Sie ein neues Feld
alter table students add column nal char(64);
PS: Ich hasse den oben genannten Blog „Einfache Erklärung + Code“. Tatsächlich habe ich damals viele Beispiele im MySQL-Terminal geschrieben, aber da auf dem Computer zu diesem Zeitpunkt eine Software zum Ansehen von Videos lief, konnte ich nicht Strg+C/V drücken. Ich bin jetzt zu faul, haha~~
2. Python-Verbindung zur Datenbank
python3 unterstützt mysqldb nicht mehr. Sein Ersatzmodul ist PyMySQL. Die Beispiele in diesem Artikel stammen aus der Python3.4-Umgebung.
1. Installieren Sie das PyMySQL-Modul
pip3 install pymysql
2 Datenbank und Datenbeispiel einfügen
import pymysql #生成实例,连接数据库zcl conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur = conn.cursor() #插入数据 reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Jack','man',25,1351234,"CN")) reCount = cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)',('Mary','female',18,1341234,"USA")) conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
Ergebnisse anzeigen:
mysql> select* from students; +----+------+-----+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+-----+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | +----+------+-----+-----+-------------+------+ rows in set
3. Daten abrufen
import pymysql conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') cur = conn.cursor() reCount = cur.execute('select* from students') res = cur.fetchone() #获取一条数据 res2 = cur.fetchmany(3) #获取3条数据 res3 = cur.fetchall() #获取所有(元组格式) print(res) print(res2) print(res3) conn.commit() cur.close() conn.close()
Ausgabe:
(1, 'zcl', 'man', 22, '15622341234', None) ((2, 'alex', 'man', 30, '15622341235', None), (5, 'Jack', 'man', 25, '1351234', 'CN'), (6, 'Mary', 'female', 18, '1341234', 'USA')) ()
3. Transaktions-Rollback
Transaktions-Rollback wird ausgeführt, bevor Daten in die Datenbank geschrieben werden, daher muss der Transaktions-Rollback conn.rollback() erfolgen, bevor die Instanz den Befehl conn.commit() festschreibt. Solange die Daten nicht übermittelt werden, kann ein Rollback durchgeführt werden, die ID wird jedoch nach dem Rollback automatisch erhöht. Bitte sehen Sie sich das folgende Beispiel an:
Fügen Sie 3 Datenelemente ein (Transaktions-Rollback beachten):
import pymysql #连接数据库zcl conn=pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur=conn.cursor() #插入数据 reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Jack', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s,%s,%s,%s,%s)', ('Jack2', 'man', 25, 1351234, "CN")) reCount=cur.execute('insert into students(name, sex, age, tel, nal) values(%s, %s, %s, %s, %s)', ('Mary', 'female', 18, 1341234, "USA")) conn.rollback() #事务回滚 conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
Vor der Ausführung des Befehls und nach der Ausführung des Befehls (einschließlich Rollback-Vorgang) (beachten Sie die ID-Nummer): Das Ergebnis der Nichtausführung des obigen Codes und der Ausführung des obigen Codes ist dasselbe!! Die Schülertabelle fügt keine Daten hinzu!
mysql> select* from students; +----+------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | +----+------+--------+-----+-------------+------+ rows in set
Nach der Ausführung des Befehls (ohne Rollback-Vorgang): Kommentieren Sie einfach die 11. Codezeile oben.
mysql> select* from students; +----+-------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+-------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | | 10 | Jack | man | 25 | 1351234 | CN | | 11 | Jack2 | man | 25 | 1351234 | CN | | 12 | Mary | female | 18 | 1341234 | USA | +----+-------+--------+-----+-------------+------+ rows in set
Zusammenfassung: Obwohl die Transaktion zurückgesetzt wird, wird die ID immer noch erhöht und wird aufgrund des Rollbacks nicht abgebrochen. Dies hat jedoch keinen Einfluss auf die Konsistenz der Daten (ich kenne das zugrunde liegende Prinzip nicht ~)
4. Daten stapelweise einfügen
import pymysql #连接数据库zcl conn = pymysql.connect(host='127.0.0.1', user='root', passwd='root', db='zcl') #生成游标,当前实例所处状态 cur = conn.cursor() li = [ ("cjy","man",18,1562234,"USA"), ("cjy2","man",18,1562235,"USA"), ("cjy3","man",18,1562235,"USA"), ("cjy4","man",18,1562235,"USA"), ("cjy5","man",18,1562235,"USA"), ] #插入数据 reCount = cur.executemany('insert into students(name,sex,age,tel,nal) values(%s,%s,%s,%s,%s)', li) #conn.rollback() #事务回滚 conn.commit() #实例提交命令 cur.close() conn.close() print(reCount)
Ausgabe unter Pycharm: 5
MySQL-Terminalanzeige:
mysql> select* from students; #插入数据前 +----+-------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+-------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | | 10 | Jack | man | 25 | 1351234 | CN | | 11 | Jack2 | man | 25 | 1351234 | CN | | 12 | Mary | female | 18 | 1341234 | USA | +----+-------+--------+-----+-------------+------+ rows in set mysql> mysql> select* from students; #插入数据后 +----+-------+--------+-----+-------------+------+ | id | name | sex | age | tel | nal | +----+-------+--------+-----+-------------+------+ | 1 | zcl | man | 22 | 15622341234 | NULL | | 2 | alex | man | 30 | 15622341235 | NULL | | 5 | Jack | man | 25 | 1351234 | CN | | 6 | Mary | female | 18 | 1341234 | USA | | 10 | Jack | man | 25 | 1351234 | CN | | 11 | Jack2 | man | 25 | 1351234 | CN | | 12 | Mary | female | 18 | 1341234 | USA | | 13 | cjy | man | 18 | 1562234 | USA | | 14 | cjy2 | man | 18 | 1562235 | USA | | 15 | cjy3 | man | 18 | 1562235 | USA | | 16 | cjy4 | man | 18 | 1562235 | USA | | 17 | cjy5 | man | 18 | 1562235 | USA | +----+-------+--------+-----+-------------+------+ rows in set
Weitere Artikel im Zusammenhang mit Betrieb einer MySQL-Datenbank über Python. Bitte beachten Sie die chinesische PHP-Website!