Posted on 2013-06-07 19:01
pts 阅读(5821)
评论(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,所以才会产生
OperationalError: Could not decode to UTF-8 column 'name' with text '国内其他'
这个错误
因为从数据库中取出数据时,是gbk编码(因为你上次存进去的是gbk)
conn.text_factory的默认值是unicode,python会尝试将text类型的字段转换成unicode,就产生了错误
附: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'