Heim  >  Artikel  >  Backend-Entwicklung  >  Betreiben Sie die MySQL-Datenbank über Python

Betreiben Sie die MySQL-Datenbank über Python

高洛峰
高洛峰Original
2017-03-08 09:35:481021Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn