python - sqlalchemy更新數(shù)據(jù)報(bào)錯(cuò)
問題描述
這是我的更新代碼
def alter(self,id,key,value):session = Goods().getsession()session.query(Goods).filter(Goods.id==id).update({key:value})session.close()
但是會(huì)報(bào)錯(cuò)
UnicodeEncodeError: ’latin-1’ codec can’t encode characters in position 0-1: ordinal not in range(256)
最新查錯(cuò)。打印如下
print type(id),type(key),type(value)
<type ’unicode’> <type ’unicode’> <type ’unicode’>127.0.0.1 - - [31/Mar/2017 06:32:05] 'GET /alter?id=1497&key=name&value=%E8%8D%A3%E8%80%80V9+%E6%89%8B%E6%9C%BA+%E9%93%82%E5%85%89%E9%87%91+%E5%85%A8%E7%BD%91%E9%80%9A4G(4G+RAM%2B64G+ROM)%E6%A0%87%E9%85%8D HTTP/1.1' 200 -
初步發(fā)現(xiàn)問題所在 數(shù)據(jù)庫(kù)為latin1編碼
然后封裝json的時(shí)候UnicodeDecodeError: ’utf8’ codec can’t decode bytes in position 90-91: unexpected end of data
代碼
def get(self):
session = Goods().getsession() goodslist = session.query(Goods) session.close() data = [] for goods in goodslist:tmp = {}tmp[’id’] = goods.idtmp[’name’] = goods.name //這里報(bào)錯(cuò)根源 帶空格tmp[’link’] = goods.linktmp[’price’] = goods.pricetmp[’commit’] = goods.commitdata.append(tmp) jsondata = json.dumps(data) //這里報(bào)錯(cuò)
問題解答
回答1:沒怎么寫過,但是猜測(cè)一下
1. 確認(rèn)你的key和value都不為None2. 更新不用commit么
明顯是數(shù)據(jù)庫(kù)字符集設(shè)置有問題,請(qǐng)?jiān)O(shè)置數(shù)據(jù)庫(kù)字符集為UTF-8
如果不想設(shè)置數(shù)據(jù)庫(kù),就解碼待插入的數(shù)據(jù) info_str.encode(’你的格式’)再插入
相關(guān)文章:
1. javascript - 移動(dòng)端padding問題2. javascript - ios上fixed定位問題,定位在底部的按鈕不顯示了,但是又可以點(diǎn)擊到,換了一個(gè)類名就可以顯示了,但是設(shè)置的字體大小卻失效了3. javascript - js正則替換日期格式問題4. javascript - 關(guān)于微信掃一掃的技術(shù)問題5. javascript - Vue.js的ElementUI庫(kù)中,如何主動(dòng)觸發(fā)checkbox組件的change事件?6. javascript - webpack 打包 reactjs項(xiàng)目 css 分離7. javascript - vuex中子組件無(wú)法調(diào)用公共狀態(tài)8. javascript - 請(qǐng)教移動(dòng)端從詳情頁(yè)返回到列表頁(yè)原來位置的問題?9. javascript - (_a = [""], _a.raw = [""],....); js一個(gè)小括號(hào)的是什么意思?10. javascript - 怎樣定位一個(gè)動(dòng)作調(diào)用了哪個(gè)js,不打斷點(diǎn)調(diào)試?
