Python MySQLdb 使用utf-8 編碼插入中文數(shù)據(jù)問題
最近幫伙計(jì)做了一個(gè)從網(wǎng)頁抓取股票信息并把相應(yīng)信息存入MySQL中的程序。
使用環(huán)境:
Python 2.5 for Windows
MySQLdb 1.2.2 for Python 2.5
MySQL 4.1.22
在寫程序中遇到了些怪的故障。
第一個(gè)問題:插入中文失敗
這個(gè)是由于字符編碼問題引起的。MySQL安裝時(shí)我已經(jīng)設(shè)置為utf8編碼,表也是使用utf8編碼建立。程序中只要在開頭寫好#-*- coding: utf-8 -*-,并在設(shè)定連接字符串時(shí)候?qū)懬迨褂胾tf8就可以了conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8")。設(shè)置之后從MySQL中取出的以u(píng)tf8編碼保存的中文也不會(huì)發(fā)生亂碼。
對(duì)中文字符串,如:a = "浦發(fā)銀行",在進(jìn)行插入操作前做一下編碼轉(zhuǎn)換a = a.decode("gbk").encode("utf-8")。然后進(jìn)行插入操作就沒有任何問題了。
第二個(gè)問題:能插入之后無法在MySQL中保存剛才插入的數(shù)據(jù)
經(jīng)過檢查數(shù)據(jù)可以被正確的插入,但是連接斷開之后不保存在表中。經(jīng)過檢查發(fā)現(xiàn)原來是漏了conn.commit()。需要在語句執(zhí)行之后提交操作。
源代碼如下。
#-*- coding: utf-8 -*-
import sys,MySQLdb
conn=MySQLdb.connect(host="127.0.0.1",user="webdb",passwd="web123",db="web",charset="utf8") #需要設(shè)定一下charset為utf-8
cursor=conn.cursor() #生成連接的指針對(duì)象
#進(jìn)行字符串編碼轉(zhuǎn)換并進(jìn)行插入
a = "浦發(fā)銀行"
a = a.decode("gbk").encode("utf-8") #編碼轉(zhuǎn)換為utf-8
sql="insert into stocklist (stockno,stockname) values (%s,%s)" #生成sql語句
param=('600000',a) #生成sql語句的參數(shù)
n = cursor.execute(sql,param) #執(zhí)行sql語句
#以上操作等價(jià)于n = cursor.execute("insert into stocklist (stockno,stockname) values ('430004','"+ "浦發(fā)銀行".decode("gbk").encode("utf-8") + "')")
print n
conn.commit() #提交操作結(jié)果
#進(jìn)行查詢操作檢查剛剛執(zhí)行的插入操作結(jié)果
n = cursor.execute("select * from stocklist")
for row in cursor.fetchall():
print row[0] + row[1]
cursor.close() #關(guān)閉指針
conn.close() #關(guān)閉連接
總結(jié)
以上所述是小編給大家介紹的Python MySQLdb 使用utf-8 編碼插入中文數(shù)據(jù)問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Python實(shí)現(xiàn)標(biāo)記數(shù)組的連通域
這篇文章主要為大家詳細(xì)介紹了如何通過Python實(shí)現(xiàn)標(biāo)記數(shù)組的連通域,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2023-04-04
python 實(shí)現(xiàn)調(diào)用子文件下的模塊方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)調(diào)用子文件下的模塊方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python實(shí)現(xiàn)包含min函數(shù)的棧
這篇文章主要介紹了Python實(shí)現(xiàn)包含min函數(shù)的棧,可實(shí)現(xiàn)棧中元素的計(jì)算及進(jìn)棧出棧等操作,需要的朋友可以參考下2016-04-04
使用python實(shí)現(xiàn)excel的Vlookup功能
這篇文章主要介紹了使用python實(shí)現(xiàn)excel的Vlookup功能,當(dāng)我們想要查找的數(shù)據(jù)量較大時(shí),這時(shí)則有請(qǐng)我們的主角VLookup函數(shù)出場,那么如何用python實(shí)現(xiàn)VLookup呢,需要的朋友可以參考下2023-04-04
python 創(chuàng)建彈出式菜單的實(shí)現(xiàn)代碼
這篇文章主要介紹了python 創(chuàng)建彈出式菜單的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-07-07
通過Python使用saltstack生成服務(wù)器資產(chǎn)清單
人工去對(duì)每一臺(tái)服務(wù)器的硬件信息并記錄早已經(jīng)過去了,無論通過腳本還是自動(dòng)化工具都是可以進(jìn)行一次編寫到處抓取的,本文主要使用saltstack作為使用工具,然后利用其提供的APi編寫所需的Python腳本2016-03-03

