MySQL-python模塊的基本使用

首先是導入該模塊:

>>>importMySQLdb

然後是創建與數據庫的連接:

>>>conn= MySQLdb.connect('localhost','root','passwd')

(在這條命令裏,localhost是指連接本地的數據庫,root是指連接數據庫中的root用戶,passwd是該用戶的密碼。)

接着是創建遊標

>>>cur= conn.cursor()#創建遊標是用來使用SQL指令

>>>conn.select('python_test')#選擇連接的數據庫,該語句是連接了一個名爲python_test的數據庫

好,前期準備已經ok了,現在開始看看如何使用MySQL-python來進行數據庫的增刪查改


(在此之前,先愛心提醒一下,若以下命令要用到引號,記得最好最外面的用雙引號,裏面的用單引號,不然會引發“引號問題”的。如:”Ilike 'King'”和‘Ilike 'King'’python來說是不一樣的哦~~~)

1.

#一次插入一行數據

>>>cur.execute("insertinto表名(屬性名1,屬性名2,...)value('1,2,...')")

該語句有兩個缺點,第一是屬性值被固定了,意思是要輸入值得把語句從頭打一遍,第二是一次只能輸入一行數據,面對有多行數據的輸入就顯得很麻煩,接下來,我們一步步解決這兩個問題:

#可變數據的插入

>>>sqli= "insert into表名(屬性名1,屬性名2,...)value(%s,%s,...)"

>>>cur.execute(sqli,('1','2',...))

#一次插入多個數據

>>>sqlim= "insert into表名(屬性名1,屬性名2,...)values(%s,%s,...)"#插入多個數據

>>>cur.executemany(sqlim,[('11','12',...),('21','22',...),('31','32',...),...])


如上語句,將SQL語言對象賦給一個變量,然後再使用execute()函數,函數第一個參數是SQL語言對象,第二個爲參數是一個元組,元組內爲屬性對應的值,這樣就可以實現可變數據的插入;

進一步,在定義SQL語言對象時,把value改爲values,再使用executemany()函數,該函數第一個參數仍然是SQL語言對象,第二個參數是一個列表,列表內是多個元組,元組內是對應的屬性值,這樣就可以實現一次插入多個值。


2.&

類似增加的操作,刪和改也是用相同的方法,使用execute()函數處理相應的SQL語句即可:

>>>cur.execute('deletefrom student where id=3')

>>>cur.execute("updatestudent set name='aa' where id='3'")

(注:student爲表名)

3.

相對於增,刪和改,查會麻煩一點,因爲前者都可以用一句命令完成,而查這個動作一般得兩句命令,這是因爲在MySQL裏,select語句可以把表打印出來,但是在python裏是無法將表打印出來的。

首先使用第一條命令,用於查詢該表有多少條記錄:

>>>cur.execute("select * from student")

然後可以使用fetchone命令對錶內記錄逐條查詢

>>>cur.fetchone()#出來一條

>>>cur.fetchone()#出來下一條

該命令的缺陷在於像存在一個無形的指針一樣,你只能一直往下查,不能回頭,而且到底(最後一條記錄)之後就不能再繼續查詢了。

此時我們可以用以下命令將那個無形的指針移動:

>>>cur.scroll(移動多少,'移動位置')

該函數的第一個參數是移動位數,第二個參數是指將那個無形的指針安置的位置,如scoll(0,absolute),就是指把無形指針安置到開頭第一個位置,然後往下移動0位。(關於該函數我知道的不多,有興趣的讀者可自行百度)


以上並沒有解決一次取一行的缺陷,而我們用以下函數一下取多行:

>>>cur.fetchmany(15)

其中15是指取15條記錄。

所以對於SQL語句select* from student,在python裏我們用cur.fetchmany(cur.execute("setlect * from table.name"))可達到同樣效果。


到這裏,你已經把增刪查改的基本操作都學了,但是事情還沒有完,你得把你對數據庫的操作傳給數據庫,數據庫纔會按你的命令對自己進行改造,此時你的輸入:
>>>conn.commit()

commit命令用於把事務所做的修改保存到數據庫。

(注:commit()MySQL的存儲引擎對事務的支持有關。原來MySQL中有多種類型的存儲引擎,例如:MyISAMInnoDB等。MyISAM不支持事務處理,而InnoDB是事務型數據庫,支持事務。  有的人安裝的MySQL的默認存儲引擎就是InnoDB,所以對數據庫數據的操作會在事先分配的緩存中進行,只有在commit之後,數據庫的數據纔會改變。更多參考可見鏈接:http://www.cnblogs.com/KarryWang/p/3225551.html)

最後的最後,關閉遊標和連接,不要忽視每一個細節~~~

>>>cur.close()#先關遊標

>>>conn.close()#後關連接

下面給出參考代碼:

import MySQLdb
conn = MySQLdb.connect('localhost','root','danger')
cur = conn.cursor()
conn.select_db('python_test')
cur.execute("insert into student(id,name,class,age) value(91,'Z','SSS',19)")
sqli = "insert into student(id,name,class,age) value(%s,%s,%s,%s)"
cur.execute(sqli,(92,'Y','SSS',29))
sqlim = "insert into student(id,name,class,age) values(%s,%s,%s,%s)"
cur.executemany(sqlim,[(81,'Mike','s',11),(82,'Egg','s',12),(83,'Apple','s',13)])
cur.execute("delete from student where name='Tom'")
cur.execute("update student set id=99 where name='Z'")
cur.execute("select * from student")
a1 =cur.fetchone()
a2 =cur.fetchone()
cur.scroll(0,'absolute')
a3 =cur.fetchone()
a4 =cur.fetchmany(5)
a5 = cur.fetchmany(cur.execute("select * from student"))
s=[a1,a2,a3,a4,a5]
for i in range(0,5):
	print s[i]
conn.commit()
cur.close()
conn.close()

代碼最後結果驗證:




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