文章目錄
- 安裝mysql模組
- 串連資料庫
- 重點講講插入和更新資料
安裝mysql模組
sudo easy_install mysql-python
串連資料庫
1 #!/usr/bin/env python2 #coding=utf-83 import MySQLdb4 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才將問題解決