python操作mysql方法和常見問題


 

安裝mysql模塊

sudo easy_install mysql-python

連接數據庫

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()

連接數據庫時要注意數據庫編碼,不然一堆編碼問題很愁人的~最好統一使用utf8編碼。

執行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來獲取一條結果。如果是插入數據,要執行commit操作,不然數據不會被寫入數據庫。最好是執行完所有的sql語句之后再commit,實踐證明,這樣會帶來很大的速度提升。

重點講講插入和更新數據

插入或更新數據有兩種方法

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注入風險。

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

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

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM