深度剖析Python包技術(shù)
想要充分的掌握Python包的技術(shù),那么就要對(duì)Python包中的結(jié)構(gòu)、語(yǔ)句、變量、函數(shù)、預(yù)處理指令、輸入和輸出等內(nèi)容進(jìn)行了解掌握,下面文章進(jìn)行學(xué)習(xí)研究。
通過(guò)提供用于操作數(shù)據(jù)庫(kù)表的類和對(duì)象,對(duì)象關(guān)系映射工具有助于提高生產(chǎn)率。Python 最好的對(duì)象關(guān)系映射工具是 SQLObject —— 一個(gè)開(kāi)放源碼項(xiàng)目。它幾乎完成編程數(shù)據(jù)庫(kù)所需的所有操作。
本文介紹 SQLObject 及其功能。閱讀本文后,您將能夠不編寫任何 SQL 代碼而連接 Python 與數(shù)據(jù)庫(kù)。 當(dāng)面向?qū)ο缶幊谭独凉M足大多數(shù)數(shù)據(jù)庫(kù)的關(guān)系范例時(shí),通常會(huì)看到對(duì)象關(guān)系映射。對(duì)象關(guān)系映射是這兩個(gè)世界的橋梁。
它允許您定義與數(shù)據(jù)庫(kù)表對(duì)應(yīng)的類。然后您可以使用這些類及其實(shí)例上的方法來(lái)與數(shù)據(jù)庫(kù)交互,而不用編寫 SQL。使用對(duì)象關(guān)系映射并不意味著不需要知道關(guān)系數(shù)據(jù)庫(kù)如何工作,而是不必要編寫 SQL,從而避免編程錯(cuò)誤。
您可以找到一打以上的操作 SQL 數(shù)據(jù)庫(kù)的開(kāi)放源碼 Python包,這還沒(méi)包括用于連接 Python 與特定數(shù)據(jù)庫(kù)的特殊用途模塊。SQLObject 是其中最好的模塊。它是簡(jiǎn)單易用的完全對(duì)象關(guān)系映射包。SQLObject 幾乎可以完成編程數(shù)據(jù)庫(kù)所需的所有操作。
本文展示了 SQLObject 如何與數(shù)據(jù)庫(kù)交互,如何使用 SQLObject 編寫數(shù)據(jù)庫(kù)訪問(wèn)和數(shù)據(jù)驗(yàn)證代碼,SQLObject 具有一個(gè) setup.py 文件,安裝方式與其他任何 Python包一樣。如果您使用的是 Python V2.2,則還需要安裝 mxDateTime Python 包(SQLObject 使用 Python V2.3 的內(nèi)置 datetime 模塊,如果該模塊可用的話)。
要實(shí)際使用 SQLObject,需要設(shè)置數(shù)據(jù)庫(kù)包以及這種數(shù)據(jù)庫(kù)的 Python 接口。SQLObject 連接多種數(shù)據(jù)庫(kù),其中包括三個(gè)大的開(kāi)放源碼產(chǎn)品:MySQL、PostgreSQL 和無(wú)服務(wù)器 SQLite。最后,需要為應(yīng)用程序創(chuàng)建數(shù)據(jù)庫(kù)。對(duì)于 SQLite,這意味著創(chuàng)建一個(gè)存儲(chǔ)該數(shù)據(jù)庫(kù)的文件。對(duì)于其他數(shù)據(jù)庫(kù),這意味著連接數(shù)據(jù)庫(kù)服務(wù)器。
執(zhí)行 CREATE DATABASE 命令,并授權(quán)數(shù)據(jù)庫(kù)用戶對(duì)新數(shù)據(jù)庫(kù)的一些訪問(wèn),以便 SQLObject 可以使用該用戶帳戶來(lái)連接。需要編寫的第一個(gè) Python 代碼是數(shù)據(jù)庫(kù)連接代碼?;谒褂玫臄?shù)據(jù)庫(kù),這是惟一需要編寫不同代碼的地方。
例如,如果想讓應(yīng)用程序使用 SQLite 數(shù)據(jù)庫(kù),則需要將數(shù)據(jù)庫(kù)文件的路徑寫入位于 sqlobject.sqlite 包的 SQLite 連接構(gòu)建器中。如果數(shù)據(jù)庫(kù)文件不存在,QLObject 將告訴 SQLite 創(chuàng)建一個(gè),代碼如下:
- mysql> use mysql;
- Database changed
- mysql> create database sqlobject_demo;
- Query OK, 1 row affected (0.00 sec)
- mysql> grant all privileges on sqlobject_demo to 'dbuser'@'localhost'
- identified by 'dbpassword';
- Query OK, 0 rows affected (0.00 sec)
- mysql> flush privileges;
- Query OK, 0 rows affected (0.00 sec)
如果使用的是Python包或帶有服務(wù)器的其他數(shù)據(jù)庫(kù),則將數(shù)據(jù)庫(kù)連接信息傳遞到連接構(gòu)建器中,清單 2 提供了在上一節(jié)創(chuàng)建的 MySQL 數(shù)據(jù)庫(kù)的示例,希望本文能教會(huì)你更多東西。