Python MySQLdb 使用utf-8 編碼插入中文數據


參考地址:http://blog.csdn.net/dkman803/article/details/1925326/

本人在使用python,mysqldb操作數據庫的時候,發現如下問題,編碼如下:

conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="ym_shop",charset="utf8")  
cursor = conn.cursor()
cursor.execute("SET NAMES utf8");
single_color = '黑色'
sql_select_color = "select * from `ym_spec_value` where sp_value_name = '%s' and store_id= '%d' and sp_id = %d and gc_id = %d" %(single_color,1,1,14)
n = cursor.execute(sql_select_color)
print conn.affected_rows() ##數據庫明明有數據,顯示的卻一直是0

后來看到一下的一篇文章,才需要中文插入之前需要轉碼:

single_color = single_color.decode("gbk").encode("utf-8") #真賤啊

真的好賤,下面是看到的對我有幫助的文章

這幾天忙着幫人做一個從網頁抓取股票信息並把相應信息存入MySQL中的程序。

使用環境:
Python 2.5 for Windows
MySQLdb 1.2.2 for Python 2.5
MySQL 4.1.22

在寫程序中遇到了些怪的故障。

第一個問題:插入中文失敗
 這個是由於字符編碼問題引起的。MySQL安裝時我已經設置為utf8編碼,表也是使用utf8編碼建立。程序中只要在開頭寫好#-*- coding: utf-8 -*-,並在設定連接字符串時候寫清使用utf8就可以了conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")。設置之后從MySQL中取出的以utf8編碼保存的中文也不會發生亂碼。
 對中文字符串,如:a = "浦發銀行",在進行插入操作前做一下編碼轉換a = a.decode("gbk").encode("utf-8")。然后進行插入操作就沒有任何問題了。

第二個問題:能插入之后無法在MySQL中保存剛才插入的數據
經過檢查數據可以被正確的插入,但是連接斷開之后不保存在表中。經過檢查發現原來是漏了conn.commit()。需要在語句執行之后提交操作。

源代碼如下:

#-*- coding: utf-8 -*-
import sys,MySQLdb

conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")    #需要設定一下charset為utf-8
cursor=conn.cursor()    #生成連接的指針對象

#進行字符串編碼轉換並進行插入
a = "浦發銀行"
a = a.decode("gbk").encode("utf-8")    #編碼轉換為utf-8
sql="insert into stocklist (stockno,stockname) values (%s,%s)"    #生成sql語句
param=('600000',a)    #生成sql語句的參數
n = cursor.execute(sql,param)    #執行sql語句
#以上操作等價於n = cursor.execute("insert into stocklist (stockno,stockname) values ('430004','"+ "浦發銀行".decode("gbk").encode("utf-8") + "')")

print n
conn.commit() #提交操作結果

#進行查詢操作檢查剛剛執行的插入操作結果
n = cursor.execute("select * from stocklist")
for row in cursor.fetchall():
    print row[0] + row[1]
cursor.close()    #關閉指針
conn.close()    #關閉連接

 


免責聲明!

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



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