Python操作MySQL
1.導入MySQLdb數(shù)據(jù)庫模塊
在導入MySQLdb之前,需要安裝MySQLdb模塊。使用pip安裝,命令如下:
pip install MySQL-python
安裝成功后,導入MySQLdb模塊:
import MySQLdb
2.打開數(shù)據(jù)庫
sqlite3模塊使用connect方法打開數(shù)據(jù)庫,方法參數(shù)可以為主機ip(host)、用戶名(user)、密碼(passwd)、數(shù)據(jù)庫名稱(db)、端口(port)和編碼(charset)。
con = MySQLdb.connect(host='localhost',user='root',passwd='',db='test', port=3306, charset='utf8')
3.數(shù)據(jù)庫連接對象
上面通過connect方法返回的con對象,即是數(shù)據(jù)庫連接對象,它提供了以下方法:
·cursor()方法用來創(chuàng)建一個游標對象。
·commit()方法用來事務(wù)提交。
·rollback()方法用來事務(wù)回滾。
·close()方法用來關(guān)閉一個數(shù)據(jù)庫連接。
4.游標對象的使用
對數(shù)據(jù)庫的查詢需要使用到游標對象,首先通過cursor()方法創(chuàng)建一個游標對象:
cur = con.cursor()
游標對象有以下方法支持數(shù)據(jù)庫的操作:
·execute()用來執(zhí)行SQL語句。
·executemany()用來執(zhí)行多條SQL語句。
·close()用來關(guān)閉游標。
·fetchone()用來從結(jié)果中取一條記錄,并將游標指向下一條記錄。
·fetchmany()用來從結(jié)果中取多條記錄。
·fetchall()用來從結(jié)果中取出所有記錄。
·scroll()用于游標滾動。
5.建表
首先使用游標對象創(chuàng)建一個person表,包含id、name、age等3
列,代碼如下:
cur.execute(' CREATE TABLE person (id int not null auto_increment primary key,name varchar(20),age int)')
6.插入數(shù)據(jù)
向person表中插入兩條數(shù)據(jù)。插入數(shù)據(jù)一般有兩種做法,第一種做法是直接構(gòu)造一個插入的SQL語句,代碼如下:
data="'qiye',20"
cur.execute(' INSERT INTO person (name,age) VALUES (%s)'%data)
但是這種做法非常不安全,容易導致SQL注入。另一種做法使用占位符“%s”的方式來規(guī)避這個問題,代碼如下:
cur.execute(' INSERT INTO person (name,age) VALUES (%s,%s)',('qiye',20))
還可以使用executemany()執(zhí)行多條SQL語句,使用executemany()方法比循環(huán)使用execute()方法執(zhí)行多條SQL語句效率高很多。
cur.executemany(' INSERT INTO person (name,age) VALUES (%s,%s)',[('marry',20),('jack',20)])
這兩種方法插入數(shù)據(jù)都不會立即生效,需要使用數(shù)據(jù)庫對象con
進行提交操作:
con.commit()
如果出現(xiàn)錯誤,還可以使用回滾操作:
con.rollback()
7.查詢數(shù)據(jù)
查詢person表中的所有數(shù)據(jù),代碼如下:
cur.execute('SELECT * FROM person')
要提取查詢數(shù)據(jù),游標對象提供了fetchall()和fetchone()方法。fetchall()方法獲取所有數(shù)據(jù),返回一個二維的列表。
fetchone()方法獲取其中的一個結(jié)果,返回一個元組。使用方法如
下:
cur.execute('SELECT * FROM person')
res = cur.fetchall()
for line in res:
print line
cur.execute('SELECT * FROM person')
res = cur.fetchone()
print res
8.修改和刪除數(shù)據(jù)
cur.execute('UPDATE person SET name=%s WHERE id=%s',('rose',1))
cur.execute('DELETE FROM person WHERE id=%s',(0,))
con.commit()
con.close()
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答??! 點擊進入論壇