Python中的mysql操做能夠使用
MySQLdb模塊來完成。它符合Python社區設計的
Python Database API SpecificationV2.0標準,因此與其餘的數據庫操做的API,如SQLite等基本相似。
學習可參見:http://www.runoob.com/python3/python3-mysql.html
1.鏈接的創建與釋放
創建鏈接時可用connect函數,它返回一個Connection類型對象
conn = MySQLdb.
connect(
'localhost',
'root',
'123456',
'test')
connect方法經常使用的參數有
host:數據庫主機名.默認是用本地主機.
user:數據庫登錄名.默認是當前用戶.
passwd:數據庫登錄的祕密.默認爲空.
db:要使用的數據庫名.沒有默認值.
port:MySQL服務使用的TCP端口.默認是3306.
charset:數據庫編碼。
若是在數據編碼設置正確時,向數據庫插入數據出現亂碼時,能夠設置鏈接的字符集參數
charset。
釋放鏈接時能夠應用Connection類型對象的close方法。
conn.
close()
2.Cursor對象
執行SQL語句前要得到一個指定鏈接的Cursor對象,由Cursor對象執行SQL查詢並獲取結果。
得到Cursor對象的方法
cur = conn.
cursor()
在默認狀況下cursor方法返回的是BaseCursor類型對象,BaseCursor類型對象在執行查詢後每條記錄的結果以列表(list)表示。若是要返回字典(dict)表示的記錄,就要設置cursorclass參數爲MySQLdb.cursors.DictCursor類。
cur = conn.
cursor(cursorclass=MySQLdb.cursors.DictCursor)
這個參數也可在調用connect方法創建鏈接時設置
conn = MySQLdb.
connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test' cursorclass = MySQLdb.cursors.DictCursor)
執行結束後能夠關閉cursor對象
cur.
close()
3.查詢,插入,更新、刪除操做。
Cursor類型提供了execute方法用於執行SQL操做
execute
(
query
[,parameters])
query是一個SQL字符串,parameters是一個序列或映射,返回值是所影響的記錄數
查詢
cur.
execute(
"select * from t1 where name = %s and age = %s", (
'June', 27))
cur.
execute(
"select * from t1 where name = %(name)s and age = %(age)s", {
'name':
'June',
'age':27})
這裏和字符串的格式化操做相似,但無論參數是什麼類型,都要用'%s'
獲取結果
獲取結果集有三種方法,fetchone、fetchall和fetchmany,返回結果是一個tuple對象,tuple中的每個元素對應查詢結果中的一條記錄。
fetchone
()返回結果集中的下一條記錄
fetchall
()返回結果集中的剩餘記錄
fetchmany
([size])返回結果集中size條記錄
插入、更新、刪除
cur.
execute(
"insert t1(name, age) values(%s, %s)", (
'Jack', 32))
更新和刪除的操做與更新、刪除相似
除了execute,Cursor類還提供了executemany()方法
executemany
(
query
[, parametersequence])
querey是一個查詢字符串,parametersequence是一個參數序列。這一序列的每一項都是一個序列或映射對象。但executemany只適合插入、更新或刪除操做,而不適用於查詢操做。
cur.
execute(
"insert t1(name, age) values(%s, %s)", ((
'Jack', 32), (
'Junior', 24)))
mysql如今通常會默認InnoDB做爲默認引擎,InnoDB引擎執行插入、更新、刪除操做後要進行提交,纔會更新數據庫。
cur.
commit()
4.其餘操做
Connection類:
rollback
() 回滾
Cursor類:
callproc
(
procname
,
args
):用來執行存儲過程,接收的參數爲存儲過程名和參數列表,返回值爲受影響的行數。
nextset
():移動到下一個結果集
執行查詢操做或存儲過程時可能返回多個結果集,例如:
cur.
execute(
'select * from t1; select * from t2')