錯(cuò)問癥狀:
OperationalError: Could not decode to UTF-8 column 'shouji_lanshouyuan' with text '國際2部 鄔長(zhǎng)春'
解決方案:
conn = sqlite3.connection(" ... ")
conn.text_factory = str
解決問題方案來源:http://bbs.csdn.net/topics/250055755
設(shè)置python使用什么類型來處理sqlite3的text類型,默認(rèn)是unicode,所以才會(huì)產(chǎn)生
OperationalError: Could not decode to UTF-8 column 'name' with text '國內(nèi)其他'
這個(gè)錯(cuò)誤
因?yàn)閺臄?shù)據(jù)庫中取出數(shù)據(jù)時(shí),是gbk編碼(因?yàn)槟闵洗未孢M(jìn)去的是gbk)
conn.text_factory的默認(rèn)值是unicode,python會(huì)嘗試將text類型的字段轉(zhuǎn)換成unicode,就產(chǎn)生了錯(cuò)誤
附:sqlite3的row操作:
Row對(duì)象的詳細(xì)介紹
- 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.
下面舉例說明
c = cx.cursor()
c.execute('select * from catalog')
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']
使用列的關(guān)鍵詞查詢
的處理