安裝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才將問題解決