python操作mysql方法和常見問題

來源:互聯網
上載者:User
文章目錄
  • 安裝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才將問題解決

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.