日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

python操作mysql方法和常見問題

 java_laq小館 2014-08-04

python操作mysql方法和常見問題

 

安裝mysql模塊

sudo easy_install mysql-python

連接數(shù)據(jù)庫

1 #!/usr/bin/env python
2 #coding=utf-8
3 import MySQLdb
4 conn = MySQLdb.connect('localhost','root','rootpass','oj',charset='utf8')
5 cur = conn.cursor()

連接數(shù)據(jù)庫時要注意數(shù)據(jù)庫編碼,不然一堆編碼問題很愁人的~最好統(tǒng)一使用utf8編碼。

執(zhí)行sql語句

1 sql_content = "select * from user"
2 cur.execute(sql_content)
3 data = cur.fetchall()
4 for i in data:
5     print i

可以用fetchone來獲取一條結(jié)果。如果是插入數(shù)據(jù),要執(zhí)行commit操作,不然數(shù)據(jù)不會被寫入數(shù)據(jù)庫。最好是執(zhí)行完所有的sql語句之后再commit,實踐證明,這樣會帶來很大的速度提升。

重點講講插入和更新數(shù)據(jù)

插入或更新數(shù)據(jù)有兩種方法

1.拼接sql語句:

sql_content = "insert into table(key1,key2,key3) values (%s,%s,%s)"%(value1,value2,value3)
cur.execute(sql_content)

2.用問號替代

sql_content = "insert into table(key1,key2,key3) values (?,?,?)"
cur.execute(sql_content,(value1,value2,value3))

 

如果value的值存在不確定性,那么上面兩條語句存在sql注入風(fēng)險。

例如,如果value是一段html代碼,html代碼中如果存在引號(但引號或者雙引號),如果不加處理,那么sql語句就將被截斷,將會引發(fā)插入錯誤。

如果value中存在英文逗號,將會造成前面的key和后面的value不對應(yīng),也不能正確插入數(shù)據(jù)。

如果value中存在反斜線\,那么在python中反斜線后面的數(shù)據(jù)將被轉(zhuǎn)義,如果不處理插入的話將會造成字符丟失或者其他不可遇見的結(jié)果。

因為在sql中和在python中有好多含有特殊含義的符號,如果不能很好的處理的話將會出現(xiàn)好多問題,幸好MYSQLdb模塊給我們提供了一個escape_string方法,用這個方法能自動處理好上面的問題,特別方便。

此外,不建議一次插入多個數(shù)據(jù),因為一次插入多個數(shù)據(jù)有可能造成key和value不能對應(yīng),昨天因為這個問題糾結(jié)了一下午。最后將一條sql語句拆成多條語句,也就是一次插入一個value才將問題解決

 


博主ma6174對本博客文章(除轉(zhuǎn)載的)享有版權(quán),未經(jīng)許可不得用于商業(yè)用途。轉(zhuǎn)載請注明出處http://www.cnblogs.com/ma6174/

對文章有啥看法或建議,可以評論或發(fā)電子郵件到ma6174@163.com

來自:http://www.cnblogs.com/ma6174/archive/2013/02/21/2920126.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多