申明: 本站飛宇網 https://feiyetopro.blogspot.com/。自網路收集整理之書籍、文章、影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]。謝謝!

第10章 Python資料庫程式設計
本章將介紹Python的資料庫程式設計。日常開發中90%的應用都需要使用資料庫,資料庫為資料提供了安全、可靠、完整的存儲方式。Python提供了多種連接資料庫的手段,包括ODBC、DAO、ADO,以及Python的專用模組等方式。Python的shelve模組可以類比小型資料庫,支援以字典的方式訪問資料庫。SQLite是一種嵌入式的資料庫,通常作為Python的GUI程式的後臺資料庫。本章將介紹SQLite資料庫的基本語法和操作方法等方面的內容。
本章的知識點:
·ODBC的連接方式
·DAO的連接方式
·ADO的連接方式
·訪問Oracle資料庫的各種方法
·MySQL資料庫的訪問
·SQLite資料庫的使用
10.1 Python環境下的資料庫程式設計
Python提供了多種連接資料庫的手段,包括ODBC、DAO、ADO,以及Python的專用模組等方式。Python提供了連接Oracle、MySQL等資料庫的專用模組。ADO和Python的專用模組是比較常用的存取方法。
10.1.1 通過ODBC訪問資料庫
ODBC(Open DataBase Connectivity)是微軟建立的一組規範,ODBC提供了一組對資料庫訪問的應用程式設計發展介面,通過這些介面函數可以完成資料庫的各種操作。ODBC的應用程式不依賴於任何資料庫,所有的資料庫操作都由對應的資料庫ODBC驅動程式完成。ODBC在大多數的資料庫上都可以使用,例如檔案系統、Access、SQLServer、Oracle資料庫均可用ODBC進行訪問。程式師可以直接將SQL語句發送給ODBC處理,ODBC統一了資料庫的處理方式。下面以連接Access資料庫為例說明ODBC的連接方式。
按一下【開始】|【程式】命令,找到並打開Access資料庫。在Access中創建表address,表結構如圖10-1所示。
在訪問addresses資料庫之前,需要先創建資料來源,建立Access和ODBC的連接。按一下【開始】|【設置】|【控制台】命令,打開【管理工具】|【創建新資料來源】視窗,選擇Microsoft
Access Driver(*.mdb)選項,如圖10-2所示。


按一下【完成】按鈕,彈出如圖10-3所示的對話方塊。在【資料來源名】項中輸入資料庫的名稱,即address。然後按一下【選擇…】按鈕。彈出【選擇資料庫】對話方塊,找到addresses.mdb的檔路徑,如圖10-4所示。


最後按一下【確定】按鈕即完成了ODBC連接的配置。這樣在程式中就可以正常調用addresses資料庫了。ODBC連接資料主要是使用odbc()返回的curser對象對資料集合進行操作。下面這段代碼查詢表address,並返回查詢的結果集。
01
import odbc, dbi # 導入ODBC模組和驅動程式
02
import time
03
04
db = odbc.odbc('addresses/scott/tiger') # 打開資料庫連接
05
curser = db.cursor() # 產生cursor游標
06
curser.execute("select * from address order by id desc")
07
for col in curser.description: # 顯示行描述
08 print (col[0], col[1])
09
result = curser.fetchall()
10
for row in result: # 輸出各欄位的值
11 print (row)
12 print (row[1], row[2])
13 timeTuple = time.localtime(row[3])
14 print (time.strftime('%Y/%m/%d',
timeTuple))
【代碼說明】
·第1行代碼導入odbc、dbi模組,使程式能找到資料來源中設置的Access資料庫。
·第4行代碼連接Access資料庫addresses.mdb。其中addresses表示資料庫名稱,scott表示資料來源的用戶名,tiger表示資料來源的密碼。
·第5行代碼返回Access資料庫的游標物件curser,該游標物件可以查詢、添加、刪除和修改資料庫。
·第6行代碼調用curser物件的execute()方法查詢表address的內容。
·第7行代碼遍歷curser物件description屬性。
·第8行代碼輸出表address的欄位名稱和欄位類型。輸出結果如下所示。
id NUMBER
name STRING
address STRING
createtime DATE
·第9行代碼調用curser物件的fetchall()方法,返回結果集物件result。
·第10行代碼遍歷result結果集。
·第11行代碼輸出表address每行的內容。輸出結果如下所示。
(3,'\xcd\xf5\xce\xe5','\xb1\xb1\xbe\xa9\xb6\xab\xb3\xc7\xc7\xf8',
<DbiDate object at 0x00BBB0C0>)
(2,'\xc0\xee\xcb\xc4','\xb1\xb1\xbe\xa9\xb3\xaf\xd1\xf4\xc7\xf8',
<DbiDate object at 0x00BBB0A0>)
(1,'\xd5\xc5\xc8\xfd','\xb1\xb1\xbe\xa9\xba\xa3\xb5\xed\xc7\xf8',<DbiDate
object at 0x00BBB0D0>)
·第12行代碼輸出name、address欄位的值。輸出結果如下所示。
王五 北京東城區
李四 北京朝陽區
張三 北京海澱區
·第13行代碼調用localtime()方法把欄位createtime轉換為元組。
·第14行代碼調用strftime()方法把元組格式化為字串輸出。輸出結果如下所示。
2014/03/12
2014/02/06
2014/01/09
10.1.2 使用DAO物件訪問資料庫
DAO(Data Access Object)是常見的一種連接資料庫的方式。DAO具有物件導向的介面,提供了Microsoft
Jet資料庫引擎,可以直接連接到資料庫,操作方式和ODBC相似。DAO適用于小型應用程式或小範圍本地使用。DAO模型是設計關聯式資料庫系統結構的物件類的集合。DAO提供了管理一個關係型數據庫系統所需操作的屬性和方法,包括創建資料庫、定義表、欄位和索引,以及查詢、添加、刪除、修改等操作。
Python的擴展模組win32com.client實現了DAO的連接方式。DAO的連接方式不需要類似ODBC的配置操作,可以在Python程式中直接連接資料庫。下面這段代碼通過DAO的方式連接Access資料庫addresses,並演示了DAO查詢和插入等操作資料庫的方法。
01
import win32com.client
02
03
engine = win32com.client.Dispatch("DAO.DBEngine.36") # 產生實體資料庫引擎
04
db = engine.OpenDatabase("addresses.mdb") # 打開資料庫連接
05
rs = db.OpenRecordset("address") # 根據表名返回結果集物件
06
rs = db.OpenRecordset("select * from address") # 通過SQL語句返回資料集對象
07
# 插入資料
08
db.Execute("""
09
insert into address(name, address, createtime)
10
values('趙濤', '上海虹口', '2008-3-25')
11
""")
12
while not rs.EOF:
# 輸出表address中的資料
13 print
((rs.Fields("address").Value).encode('gb2312')) # 轉為gb2312編碼後輸出
14 rs.MoveNext()
【代碼說明】
·第1行代碼導入win32com.client模組。該模組調用win32的介面訪問資料。
·第3行代碼產生實體資料庫引擎,返回物件engine。
·第4行代碼訪問資料庫addresses.mdb,返回資料庫連接db。
·第5行代碼根據表名返回結果集物件rs。
·第6行代碼根據SQL語句返回資料集物件rs。該rs物件的內容和第5行代碼rs物件的內容相同。
·第8行代碼調用db物件的Execute()方法執行插入操作。
·第12行代碼遍歷結果集物件rs,如果rs中的記錄指標移到表address的尾部,則退出迴圈。
·第13行代碼獲取欄位address的值,由於address欄位中包含中文,輸出時需要進行編碼轉換。Python提供了encode()方法進行編碼轉換,把字串的字元集轉換為“gb2312”即可。輸出結果如下所示。
北京海澱區
北京朝陽區
北京東城區
上海虹口
·第14行代碼調用MoveNext()方法,把記錄指標移動到下一行。
注意 不同版本的Access資料對應的資料庫引擎可能不同。如果資料庫是Access97,則使用DAO.DBEngine.35作為引擎。
10.1.3 使用ActiveX Data Object訪問資料庫
ActiveX Data Objects(ADO)是微軟提供的連接資料庫的介面。ADO的存取速度比DAO更快。ADO可以支援多種資料庫,例如Oracle、SQL
Server、Access、MySQL等。同時ADO可以應用於文字檔、Word、Excel等檔案類型的資料來源。ADO的連接方式需要設置連接字串,連接字串是由連接資料庫的參數組成的。例如,連接oracle資料庫的連接字串可以表示為Provider=OraOLEDB.Oracle;PLSQLRSet=1;Password=tiger;UserID=scott。參數Provider表示資料來源名稱,參數PLSQLRSet表示返回PLSQL結果集,參數Password表示訪問資料庫的密碼,參數UserID表示訪問資料庫的帳戶。
下面以訪問oracle資料庫示例表emp、dept為例說明ADO連接方式的使用。表emp、dept是scott帳戶下的表。使用PL/SQL
Developer連接oracle資料庫,登錄的用戶名為scott,密碼為tiger。要求從表emp、dept中查詢薪水大於2500元的員工姓名、工作、薪水、所在部門和部門管理者等資訊。由於需要列出部門管理者的姓名,所以需要使用自連接,即from語句中需要兩個表emp。員工中只有公司老闆沒有管理者而且薪水大於2500元,所以需要使用外連接才能顯示出這條記錄。SQL語句如圖10-5所示。
下面這段代碼通過ADO的連接方式實現了上述的查詢。
01
import win32com.client
02
03
conn = win32com.client.Dispatch('ADODB.Connection') # 產生實體資料庫連線物件
04
dsn='Provider=OraOLEDB.Oracle;PLSQLRSet=1;Password=tiger;UserID=scott;
05
DataSource=ORCL'
06
conn.Open(dsn) # 打開Oracle資料庫
07
rs = win32com.client.Dispatch('ADODB.Recordset')
08
sql = """select a.ename 姓名,a.job 工作,a.sal 薪水,c.dname 部門,b.ename 管理者
09 from emp a,emp b,dept c
10 where a.sal > 2500
11 and a.deptno = c.deptno
12 and a.mgr = b.empno(+)
13 order by a.sal"""
14
rs.Open(sql, conn) # 返回查詢的結果集
15
rs.MoveFirst()
16
li = list()
17
while not rs.EOF:
18 d = dict()
19 for x in range(rs.Fields.Count): # 把每行資料存儲在一個字典中
20 key = rs.Fields.Item(x).Name
21 value = rs.Fields.Item(x).Value
22 d.setdefault(key, value) # 建立欄位名和欄位值的對應關係
23 li.append(d) # 把每個字典存儲在清單中
24 print (rs.Fields("薪水").Value, rs.Fields("工作").Value, \
25 rs.Fields("部門").Value, rs.Fields("姓名").Value, \
26 rs.Fields("管理者").Value)
27 rs.MoveNext()
28
for d in li: # 輸出清單中的內容
29 for key in d.keys():
30
print (key.encode("gb2312"),
d.get(key),)
31 print()
32
conn.Close() # 關閉連接

【代碼說明】
·第3行代碼產生實體資料庫引擎,返回連線物件conn。
·第4行代碼表示Oracle資料庫的連接字串。
·第6行代碼建立Oracle資料庫的連接。
·第7行代碼創建結果集對象rs。
·第8行代碼查詢工資大於2500元的員工資訊。
·第14行代碼獲取查詢的結果集。
·第15行代碼把記錄指標移動到結果集的第1行。
·第19~22行代碼遍歷每行資料的欄位,建立欄位名和欄位值的對應關係,並存儲到1個字典中。
·第23行代碼把每行記錄對應的字典存儲到清單中。
·第24行代碼輸出結果集的內容,Fields()方法通過欄位名獲取欄位物件。輸出結果如下所示。
2850 MANAGER SALES BLAKE KING
2975 MANAGER RESEARCH JONES KING
3000 ANALYST RESEARCH SCOTT JONES
3000 ANALYST RESEARCH FORD JONES
5000 PRESIDENT ACCOUNTING KING None
·第28~31行代碼遍歷清單中的每個字典,輸出清單中的內容。輸出結果如下所示。
薪水 2850 工作 MANAGER 部門 SALES 姓名 BLAKE 管理者 KING
薪水 2975 工作 MANAGER 部門 RESEARCH 姓名 JONES 管理者 KING
薪水 3000 工作 ANALYST 部門 RESEARCH 姓名 SCOTT 管理者 JONES
薪水 3000 工作 ANALYST 部門 RESEARCH 姓名 FORD 管理者 JONES
薪水 5000 工作 PRESIDENT 部門 ACCOUNTING 姓名 KING 管理者 None
·第32行代碼關閉資料庫連接。
注意 由於SQL語句中的別名使用了中文,所以需要調用encode()方法轉換一下。
10.1.4 Python連接資料庫的專用模組
Python提供了連接資料庫的專用模組,不同的資料庫可以使用相應的專用模組訪問資料庫。下面將介紹cx_Oracle、MySQLdb模組連接Oracle、MySQL資料庫的用法。
1.cx_Oracle模組
Oracle是一種適用於大中型和微型電腦的關聯式資料庫管理系統。Oracle資料庫可運行在多種作業系統上,包括UNIX、Linux、Windwos等,支持多種網路通訊協定,包括TCP/IP、DECnet、LU6.2等,具有良好的可攜性、相容性、開放性和高吞吐率。支援Oracle9i、Oracle10g、Oracle11g等不同版本的Oracle資料庫。
Python的cx_Oracle模組可以訪問Oracle資料庫,cx_Oracle模組的下載位址為http://www.python.net/crew/atuining/cx_Oracle/ 。下面這段代碼使用cx_Oracle模組連接Oracle9.2資料庫。
01
import cx_Oracle
02
03
connection = cx_Oracle.connect("scott", "tiger",
"ORCL") # 連接Oracle資料庫
04
cursor = connection.cursor() # 獲取cursor物件操作資料庫
05
sql = """select a.ename 姓名,a.job 工作,a.sal 薪水,c.dname 部門,b.ename 管理者
06 from emp a,emp b,dept c
07 where a.sal > 2500
08 and a.deptno = c.deptno
09 and a.mgr = b.empno(+)
10 order by a.sal"""
11
cursor.execute(sql)
12
for x in cursor.fetchall():
13 for value in x:
14 print (value,)
15
print()
16
cursor.close()
17
connection.close()
【代碼說明】
·第1行代碼導入Oracle的專用模組cx_Oracle。
·第3行代碼連接Oracle資料庫。
·第4行代碼創建游標物件cursor,該物件可執行SQL語句。
·第11行代碼執行SQL語句,查詢工資大於2500元的員工資訊。
·第12~15行代碼返回查詢的結果集,並輸出結果集的內容。輸出結果如下所示。
BLAKE MANAGER 2850.0 SALES KING
JONES MANAGER 2975.0 RESEARCH KING
SCOTT ANALYST 3000.0 RESEARCH JONES
FORD ANALYST 3000.0 RESEARCH JONES
KING PRESIDENT 5000.0 ACCOUNTING None
·第16行代碼關閉游標物件。
·第17行代碼關閉資料庫連接。
2.MySQLdb模組
MySQL是一個小型關係型數據庫管理系統。MySQL是一個開源軟體,體積小、速度快,廣泛應用在Internet上的中小型網站中。MySQL支援UNIX、Linux、Mac OS、Windows等多種作業系統。可支援多種程式設計語言進行開發,例如,C、C++、Java、Perl、PHP、Python、Ruby等。提供TCP/IP、ODBC、JDBC等多種資料庫連接方式。支援多種編碼集,如UTF-8、GB2312、Unicode等。
MySQLdb模組操作MySQL資料庫非常方便。本書使用的是MySQL5.0,讀者可以到http://download.mysql.cn/ 下載所需版本的MySQL資料庫。在使用MySQLdb模組訪問資料庫之前,先創建一個資料庫。phpMyAdmin是一個開源的MySQL資料庫管理軟體,讀者也可以到http://download.mysql.cn/ 下載最新的phpMyAdmin。下面在phpMyAdmin中創建一個資料庫,如圖10-6所示。
輸入資料庫名稱,並選擇字元集utf8_unicode_ci後按一下【創建】按鈕,資料庫addressbookdb創建成功。然後在phpMyAdmin中創建位址表address,如圖10-7所示。


注意 如果MySQL資料庫中包含中文字元,需要在創建資料庫時選擇utf8_unicode_ci字元集,否則Python程式執行插入操作將出現異常。異常資訊如下所示。
(1406, "Data too long for column
'name' at row 1")
下面這段代碼實現了Python對MySQL資料庫的插入和查詢操作。
01
import os, sys
02
import MySQLdb
03
# 連接資料庫
04
try:
05 conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='ADDRESSBOOKDB')
06
except Exception, e:
07 print (e) # 列印錯誤
08 sys.exit()
09
cursor = conn.cursor()
10
sql = "insert into address(name, address) values (%s, %s)"
11
values = (("張三", "北京海澱區"), ("李四", "北京海澱區"), ("王五", "北京海澱區"))
12
try:
13 cursor.executemany(sql, values) # 插入多條資料
14
except Exception, e:
15 print (e) # 列印錯誤
16
sql = "select * from address"
17
cursor.execute(sql) # 查詢資料
18
data = cursor.fetchall()
19
if data:
20 for x in data:
21 print (x[0], x[1])
22
cursor.close() # 關閉游標
23
conn.close() # 關閉資料庫
【代碼說明】
·第2行代碼導入MySQL的專用模組MySQLdb。
·第5行代碼調用connect()方法連接addressesdb資料庫,用戶名為root,密碼為空,主機位址為localhost。返回資料庫連線物件conn。
·第6行代碼,如果資料庫不存在,則拋出異常,並調用sys.exit()中斷程式的執行。異常資訊如下所示。
(1049, "Unknown database
'addressbookdb'")
·第9行代碼調用cursor()返回游標物件cursor。
·第10~15行代碼插入多條記錄。游標物件cursor的executemany()方法可以一次性插入多條記錄。
·第18行代碼查詢表address,返回結果集data。
·第19行代碼判斷結果集data是否為空。如果不為空,表示查詢有返回記錄。
·第21行代碼輸出結果集data的內容。輸出結果如下所示。
李四 北京海澱區
王五 北京海澱區
張三 北京海澱區
注意 如果存儲到MySQL資料庫的字串中含有特殊字元,如單引號,可以使用MySQLdb模組的函數escape_string()進行轉義,然後再存儲到資料庫中。
10.2 使用Python的持久化模組讀寫資料
Python的標準庫提供了幾種持久化模組。這些模組可以類比資料庫的操作,把資料保存在指定的檔中,例如dbhash、anydbm、shelve等模組。
shelve模組是Python的持久化物件模組,該模組與anydbm模組的用法相似。但是shelve模組返回字典的value值支援基本的Python類型,例如字串、數位,也支援元組、清單和字典等特殊類型。shevle模組的open()與dbhash模組的open()使用方法相似。下面這段代碼演示了shelve模組的使用。
01
import shelve
02
03
addresses = shelve.open('addresses')
04
addresses['1'] = ['Tom', 'Beijing road', '2008-01-03']
05
addresses['2'] = ['Jerry', 'Shanghai road', '2008-03-30']
06
if addresses.has_key('2'):
07 del addresses['2']
08
print (addresses)
09
addresses.close()
【代碼說明】
·第3行代碼打開addresses資料庫,如果addresses資料庫不存在,則創建該資料庫。目前的目錄下會創建一個名為addresses的檔。open()方法返回一個shelve物件addresses。
·第4、5行代碼添加兩條資料。addresses物件的操作方式和字典相同。
·第6行代碼判斷addresses物件中是否存在關鍵字“2”。如果存在,則刪除對應的資料。
·第8行代碼輸出addresses物件的內容,輸出結果如下所示。
{'1': ['Tom', 'Beijing road',
'2008-01-03']}
·第9行代碼關閉資料庫連接。
注意 shelve模組返回字典的key值只支援字串類型。
10.3 嵌入式資料庫SQLite
SQLite是一個開源的嵌入式資料庫引擎,體積小巧,可應用於Windows、Linux等多種作業系統,可以被安裝在個人電腦、掌上設備、播放機等不同設備中。SQLite實現了可配置、事務管理、資料檔案的跨平臺等特性,已經成為應用最多的一種資料庫系統。
10.3.1 SQLite的命令列工具
SQLite是非常著名的開源嵌入式資料庫。SQLite可以嵌入應用程式中,並且提供了SQL介面訪問資料。讀者可以從SQLite官方網址http://www.sqlite.org 下載SQLite資料庫。SQLite資料庫提供了DOS命令列工具,該工具也可以在http://www.sqlite.org 下載。運行命令列工具,在命令列中創建表test,如圖10-8所示。
由於之前沒有創建資料庫,創建表test後,SQLite會自動創建一個暫存檔案存儲。可以使用.database命令查看該檔的路徑。如果是Windows作業系統,一般在C:\Documents
and Settings\abc\Local Settings\Temp路徑下。表test創建成功後可以使用.schema命令查看表test的結構,如圖10-9所示。


下面向表test中輸入兩條記錄,然後查詢表test的內容,如圖10-10所示。
注意 SQLite命令列的每行語句以分號結束,對於複雜的SQL語句可以換行書寫。
圖10-10所示記錄的顯示方式與常見的方式差異很大。一般每條記錄會顯示在一行中,並且每列資料對齊顯示。SQLite3提供了顯示模式的選擇,可以使用.mode命令設置資料的顯示模式,如圖10-11所示。


注意 表test存儲在記憶體中,如果關閉當前的命令列視窗,表test所佔用的資源也會被釋放。再次打開命令列視窗查詢表test將提示錯誤資訊。錯誤資訊如下所示。
SQL error:no such table:test
SQLite的命令列還提供了許多實用的操作,讀者可以通過.help命令查看這些具體的命令。命令列工具的功能有限,而且操作不夠方便。例如,當某個表的資料量很大時,查看結果集就比較困難。SQLite有許多協力廠商的資料庫用戶端工具,如SQLitespy、SQLiteManager。下面將使用SQLiteManager創建存儲個人位址簿的資料庫,SQLiteManager的下載地址為http://www.sqlabs.net/sqlitemanager.php 。SQLiteManager可以創建、刪除資料庫、表、視圖等資料庫物件,提供查詢操作、查詢分析,以及修改表結構等功能。
運行SQLiteManager後,可以選擇打開或創建資料庫,如圖10-12所示。按一下【Continue】按鈕,彈出保存對話方塊,指定資料庫名稱和存儲路徑,如圖10-13所示。


完成資料庫的創建後,進入SQLiteManager的主介面。然後創建表address,創建後的表結構如圖10-14所示。按一下工具列中的SQL圖示,查詢表address的內容,如圖10-15所示。


10.3.2 使用sqlite3模組訪問SQLite資料庫
Python3已經自帶了sqlite3模組。如果要使用SQLite資料庫,需要導入sqlite3模組。連接SQLite資料庫可以分為以下6步。
1)導入sqlite3模組。
2)調用connect()創建資料庫連接,返回連線物件conn。
3)調用conn.execute()方法創建表結構並插入資料。如果設置了手動提交,需要調用conn.commit()提交插入或修改的資料。
4)調用conn.cursor()方法返回游標,通過cur.execute()方法查詢資料庫。
5)調用cur.fetchall()、cur.fetchmany()或cur.fetchone()返回查詢結果。
6)關閉cur和conn。
下面這段代碼創建了資料庫addresses,並創建表address。然後向表address中插入資料,並查詢資料。
01
import sqlite3
02
03
# 連接資料庫
04
conn =
sqlite3.connect("D:/developer/python/example/10/addresses.db")
05
# 創建表
06
conn.execute("create table if not exists address(id integer primary
key autoincrement, name
07
varchar(128), address varchar(128))")
08
# 插入資料
09
conn.execute("insert into address(name, address) values ('Tom',
'Beijing road')")
10
conn.execute("insert into address(name, address) values ('Jerry',
'Shanghai road')")
11
# 手動提交資料
12
conn.commit()
13
# 獲取游標物件
14
cur = conn.cursor()
15
# 使用游標查詢資料
16
cur.execute("select * from address")
17
# 獲取所有結果
18
res = cur.fetchall()
19
print ("address: ", res)
20
for line in res:
21 for f in line:
22 print (f,)
23 print()
24
# 關閉連接
25
cur.close()
26
conn.close()
【代碼說明】
·第1行代碼導入sqlite3模組。
·第4行代碼連接資料庫addresses.db。如果addresses.db不存在,則創建該資料庫檔。
·第6行代碼,如果表結構address不存在,則創建表address。
·第9、10行代碼向表address中插入資料。
·第12行代碼手動提交資料。在調用execute()方法之前設置資料庫的事務級別conn.isolation_level="",這樣可以不用調用commit()方法提交資料。
·第14行代碼調用cursor()方法,返回游標物件cur。物件cur用於查詢資料。
·第16行代碼調用物件cur的execute()查詢表address。
·第18行代碼調用物件cur的fetchall()返回表address的所有資料,並把資料存儲在物件res中。
·第19行代碼輸出結果集對象res。輸出結果如下所示。
address:
[(1, u'Tom', u'Beijing road'), (2, u'Jerry', u'Shanghai road')]
·第20~23行代碼迴圈輸出結果集對象res。
1 Tom Beijing road
2 Jerry Shanghai road
·第25行代碼關閉游標物件cur。
·第26行代碼關閉資料庫連線物件conn。
10.4 小結
本章介紹了Python的資料庫程式設計,重點講解了Python連接資料庫的幾種方式,包括ODBC、DAO、ADO和專用模組。結合各種連接方式,演示了Python連Access、MySQL、Oracle等資料庫的方法。Python提供了對持久化的支援,提供了shevle、pickle等模組。這些模組可以創建DBM類型的資料庫,並返回字典類型的物件。最後介紹了嵌入式資料庫SQLite,該資料庫和Python3一起發佈,適合於桌面應用程式的資料庫。
下一章將介紹使用Python進行GUI開發。
10.5 習題
1.根據自己的需求,練習相應的使用Python連接資料庫進行操作的方法。
2.創建一個Access資料庫,然後練習使用Python讀取出裡面的資料。
大澳飛宇註:
本書內容包括Python環境的安裝和配置、Python的基本語法、模塊和函數、內置數據結構、字符串和文件的處理、正則表達式的使用、異常的捕獲和處理、面向對象的語言特性和設計、Python的數據庫編程、TkinterGUI庫的使用、HTML應用、XML應用、Django網頁開發框架的使用、測試驅動開發模式應用、Python中的進程和線程、Python系統管理、網絡編程、Python圖像處理、Python語言的擴展和嵌入以及Windows下Python開發等。為了便於讀者學習,本書每個章節中都提供了詳盡的例子,結合實例講解各個知識點。
0 留言:
發佈留言