Posted on 2013-06-07 19:01
pts 閱讀(5836)
評論(0) 編輯 收藏 所屬分類:
Python
錯問癥狀:
OperationalError: Could not decode to UTF-8 column 'shouji_lanshouyuan' with text '國際2部 鄔長春'
解決方案:
conn = sqlite3.connection(" ... ")
conn.text_factory = str
解決問題方案來源:http://bbs.csdn.net/topics/250055755
設置python使用什么類型來處理sqlite3的text類型,默認是unicode,所以才會產(chǎn)生
OperationalError: Could not decode to UTF-8 column 'name' with text '國內其他'
這個錯誤
因為從數(shù)據(jù)庫中取出數(shù)據(jù)時,是gbk編碼(因為你上次存進去的是gbk)
conn.text_factory的默認值是unicode,python會嘗試將text類型的字段轉換成unicode,就產(chǎn)生了錯誤
附:sqlite3的row操作:
Row對象的詳細介紹
- class sqlite3.Row
-
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
- keys()
-
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.
下面舉例說明
cx.row_factory = sqlite3.Row
c = cx.cursor()
c.execute('select * from catalog')
<sqlite3.Cursor object at 0x05666680>
r = c.fetchone()
type(r)
<type 'sqlite3.Row'>
r
<sqlite3.Row object at 0x05348980>
print r
(0, 10, u'\u9c7c', u'Yu')
len(r)
4
r[2] #使用索引查詢
u'\u9c7c'
r.keys()
['id', 'pid', 'name', 'nickname']
使用列的關鍵詞查詢
In [43]: r['id']
Out[43]: 0
In [44]: r['name']
Out[44]: u'\u9c7c'