[PYTHON] 核心編程筆記(21.數據庫編程)

21.1 介紹


21.1.1 持久存儲


21.1.2 基本的數據庫操作和SQL語言


底層存儲

數據庫的底層存儲通常使用文件系統,它可以是普通操作系統文件,專用操作系統


文件,甚至有可能是磁盤分區


用戶界面

大部分數據庫系統會提供一個命令行工具來執行SQL命令和查詢,也有一些使用圖


形界面


數據庫

關係型數據庫管理系統通常都支持多個數據庫,如果其基於服務器,這些數據庫都


在同一臺服務器上,本例,MYSQL是一種基於服務器的關係數據庫管理系統


組件

你可以將數據庫存儲想象爲一個表格,每行數據都有一個或多個字段對應數據庫


的列,每個表每個列及其數據類型的集合構成數據庫結構的定義,數據庫能夠被創


建,也可以被刪除


SQL

數據庫命令和查詢操作需要通過SQL語句來執行


創建數據庫和賦予權限

CREATE DATABASE test;

GRANT ALL ON test.* to user(s);


選擇要使用的數據庫

USE test;


刪除數據庫

DROP DATABASE test;


創建表

CREATE TABLE users(login VARCHAR(8),uid INT,prid INT);


刪除表

DROP TABLE users;


插入行

INSERT INTO users VALUES('leanna',311,1)


更新行

UPDATE users SET prid=4 WHERE prid=2;

UPDATE users SET prid=1 WHERE uid=311;


刪除行

DELETE FROM users WHERE prid=%d;

DELETE FROM users;


21.1.3 數據庫和Python


21.2 Python數據庫應用程序


程序員接口(DB-API)


21.2.1 模塊屬性


數據屬性


屬性名描述

apilevelDB-API模塊兼容的DB-API版本號

threadsafety線程安全級別

parmstyle該模塊支持的SQL語句參數風格

connect()連接函數


MySQLdb.connect(host='dbserv',db='inv',user='smith')


21.2.2 連接對象


要與數據庫進行通信,必須先和數據庫建立連接,連接對象處理命令如何送往服務


器,以及如何從服務器接收數據等基礎功能,連接成功後就能向數據庫服務器發送


請求,得到響應


連接對象方法


close()關閉數據庫連接

commit()提交當前事務

rollback()取消當前事務

cursor()使用這個連接創建並返回一個遊標或類遊標的對象

errorhandler(cxn, cur,errcls,errval)


21.2.3 遊標對象


當你建立連接之後,就可以與數據庫進行交互,一個遊標允許用戶執行數據庫命令


和得到查詢結果,一個Python DB-API遊標對象總是扮演遊標角色,無論數據庫是


否真正支持遊標,從這一點講,數據庫接口程序必須實現遊標對象,只有這樣才能


保證無論使用何種後端數據庫你的代碼都不需要做任何改變


21.2.4 類型對象和構造器


21.2.5 關係數據庫


21.2.6 數據庫和Python:接口程序


MySQL


# api-get install python-mysql* -y

# python


>>> import MySQLdb                    

>>> cxn = MySQLdb.connect(user='root',passwd='123456')

>>> cxn.query('DROP DATABASE test')  

>>> cxn.query('CREATE DATABASE test')

>>> cxn.query("GRANT ALL ON test.* to 'test'@localhost")

>>> cxn.commit()

>>> cxn.close()


以上代碼我們沒有使用cursor對象,某些接口程序擁有連接對象,這些連接對象擁


有query()方法,可以執行SQL查詢,我們不建議使用這種方法


下面我們使用遊標對象(cursors)和他們的execute()方法,下一個交互集演示了


創建表


>>> cxn = MySQLdb.connect(user='root',passwd='123456',db='test')

>>> cur = cxn.cursor()

>>> cur.execute('CREATE TABLE users(login VARCHAR(8), uid INT)')

0L

>>> cur.execute("INSERT INTO users VALUES('john',7000)")

1L

>>> cur.execute("INSERT INTO users VALUES('john',7001)")

1L

>>> cur.execute("INSERT INTO users VALUES('jane',7001)")

1L

>>> cur.execute("INSERT INTO users VALUES('bob',7200)")

1L

>>> cur.execute("SELECT * FROM users WHERE login LIKE 'j%'")

3L

>>> for data in cur.fetchall():

...     print '%s\t%s' % data

...

john    7000

john    7001

jane    7001


最後一個特性是更新表,包括更新或刪除數據


>>> cur.execute("UPDATE users SET uid=7100 WHERE uid=7001")

2L

>>> cur.execute("SELECT * FROM users")

4L

>>> for data in cur.fetchall():

...     print '%s\t%s' % data                              

...

john    7000

john    7100

jane    7100

bob     7200

>>> cur.execute("UPDATE users SET uid=7100 WHERE uid= 7000")

1L

>>> cur.execute("SELECT * FROM users")                      

4L

>>> for data in cur.fetchall():                            

...     print '%s\t%s' % data                              

...

john    7100

john    7100

jane    7100

bob     7200

>>> cur.execute('DELETE FROM users WHERE login="bob"')

1L

>>> cur.execute('DROP TABLE users')

0L

>>> cur.close()

>>> cxn.commit()

>>> cxn.close()


21.3 對象-關係管理器(ORMs)


21.3.1 考慮對象,而不是SQL


21.3.2 Python和ORM


21.3.4 總結


21.4 相關模塊


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章