Heim >Backend-Entwicklung >Python-Tutorial >Python-Datenbankprogrammierung

Python-Datenbankprogrammierung

高洛峰
高洛峰Original
2016-11-19 10:03:211287Durchsuche

Erklären Sie am Beispiel der MySQL-Datenbank, wie Python eine Datenbank betreibt und einfache Hinzufügungen, Löschungen, Änderungen und Suchvorgänge durchführt.

Das MySQL-Datenbankbetriebsmodul von Python heißt MySQLdb und erfordert eine zusätzliche Installation.

Installation über das Pip-Tool: pip install MySQLdb

MySQLdb-Modul verwenden wir hauptsächlich die Methode zum Herstellen einer Verbindung zur Datenbank MySQLdb.Connect() Nach dem Herstellen einer Verbindung zur Datenbank verwenden wir einige Methoden Führen Sie den entsprechenden Vorgang aus.

Die Methode MySQLdb.Connect(parameters...) stellt die folgenden häufig verwendeten Parameter bereit:

Python-Datenbankprogrammierung

Die vom Verbindungsobjekt zurückgegebene Funktion connect():

Python-Datenbankprogrammierung

Das Cursorobjekt bietet auch mehrere Methoden:

Python-Datenbankprogrammierung

13.1 Hinzufügen, Löschen, Ändern und Abfragen der Datenbank

13.1.1 Erstellen Sie eine Benutzertabelle in der Testbibliothek und fügen Sie einen Datensatz hinzu

>>> conn = MySQLdb.Connect(host='192.168.1.244',user='root',passwd='QHyCTajI',db='test',charset='utf8')
>>> cursor = conn.cursor()
>>> sql = "create table user(id int,name varchar(30),password varchar(30))"
>>> cursor.execute(sql)   # 返回的数字是影响的行数
0L    
>>> sql = "insert into user(id,name,password) values('1','xiaoming','123456')"
>>> cursor.execute(sql)
1L
>>> conn.commit()  # 提交事务,写入到数据库
>>> cursor.execute('show tables')  # 查看创建的表
1L
>>> cursor.fetchall()  # 返回上一个游标执行的所有结果,默认是以元组形式返回
((u'user',),)
>>> cursor.execute('select * from user')           
1L
>>> cursor.fetchall()
((1L, u'xiaoming', u'123456'),)

13.1.2 Fügen Sie mehrere Datenelemente ein

>>> sql = 'insert into user(id,name,password) values(%s,%s,%s)'
>>> args = [('2','zhangsan','123456'), ('3','lisi','123456'),('4','wangwu','123456')] 
>>> cursor.executemany(sql, args)
3L
>>> conn.commit()
>>> sql = 'select * from user'
>>> cursor.execute(sql)
4L
>>> cursor.fetchall()
((1L, u'xiaoming', u'123456'), (2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))

Die Variable args ist eine Liste Enthält Tupel, wobei jedes Tupel jedem Datensatz entspricht. Bei der Abfrage mehrerer Datensätze kann die Verwendung dieser Methode die Einfügeeffizienz effektiv verbessern.

13.1.3 Den Datensatz des Benutzernamens xiaoming löschen

>>> sql = 'delete from user where name="xiaoming"'
>>> cursor.execute(sql)                           
1L
>>> conn.commit()
>>> sql = 'select * from user'                   
>>> cursor.execute(sql)       
3L
>>> cursor.fetchall()         
((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'), (4L, u'wangwu', u'123456'))

13.1.4 Den Datensatz abfragen

>>> sql = 'select * from user' 
>>> cursor.execute(sql)         
3L
>>> cursor.fetchone()   # 获取第一条记录
(2L, u'zhangsan', u'123456')
>>> sql = 'select * from user' 
>>> cursor.execute(sql)         
3L
>>> cursor.fetchmany(2) # 获取两条记录
((2L, u'zhangsan', u'123456'), (3L, u'lisi', u'123456'))

13.1.4 Das Ergebnis in Wörterbuchform zurückgeben

默认显示是元组形式,要想返回字典形式,使得更易处理,就用到cursor([cursorclass])中的cusorclass参数。
传入MySQLdb.cursors.DictCursor类:
>>> cursor = conn.cursor(MySQLdb.cursors.DictCursor)
>>> sql = 'select * from user'
>>> cursor.execute(sql)
3L
>>> cursor.fetchall()
({'password': u'123456', 'id': 2L, 'name': u'zhangsan'}, {'password': u'123456', 'id': 3L, 'name': u'lisi'}, {'password': u'123456', 'id': 4L, 'name': u'wangwu'})

13.2 Abfrageergebnisse durchlaufen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
try:
    conn = MySQLdb.Connect(host='127.0.0.1', port=3306, user='root', passwd='123456', connect_timeout=3, charset='utf8')
    cursor = conn.cursor()
    sql = "select * from user"
    cursor.execute(sql)
    for i in cursor.fetchall():
        print i
except Exception, e:
    print ("Connection Error: " + str(e))
finally:
    conn.close()
     
# python test.py
(2L, u'zhangsan', u'123456')
(3L, u'lisi', u'123456')
(4L, u'wangwu', u'123456')

Verwenden Sie eine for-Schleife, um die Abfrageergebnisse zu durchlaufen und eine Ausnahmebehandlung hinzuzufügen.

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