python - sqlalchemy更新數據報錯
問題描述
這是我的更新代碼
def alter(self,id,key,value):session = Goods().getsession()session.query(Goods).filter(Goods.id==id).update({key:value})session.close()
但是會報錯
UnicodeEncodeError: ’latin-1’ codec can’t encode characters in position 0-1: ordinal not in range(256)
最新查錯。打印如下
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 -
初步發現問題所在 數據庫為latin1編碼
然后封裝json的時候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 //這里報錯根源 帶空格tmp[’link’] = goods.linktmp[’price’] = goods.pricetmp[’commit’] = goods.commitdata.append(tmp) jsondata = json.dumps(data) //這里報錯
問題解答
回答1:沒怎么寫過,但是猜測一下
1. 確認你的key和value都不為None2. 更新不用commit么
明顯是數據庫字符集設置有問題,請設置數據庫字符集為UTF-8
如果不想設置數據庫,就解碼待插入的數據 info_str.encode(’你的格式’)再插入
相關文章:
1. javascript - angular使從elastichearch中取出的文本高亮顯示,如圖所示2. python bottle跑起來以后,定時執行的任務為什么每次都重復(多)執行一次?3. javascript - 求幫助 , ATOM不顯示界面!!!!4. 視頻文件不能播放,怎么辦?5. javascript - vue2如何獲取v-model變量名6. python - 爬蟲模擬登錄后,爬取csdn后臺文章列表遇到的問題7. mysql - 分庫分表、分區、讀寫分離 這些都是用在什么場景下 ,會帶來哪些效率或者其他方面的好處8. javascript - 為什么在谷歌控制臺 輸出1的時候,輸出的1立馬就不見了9. html5 - HTML代碼中的文字亂碼是怎么回事?10. javascript - ios返回不執行js怎么解決?
