ProgrammingError: You must not use 8-bit bytestrings…

题目出现:

You must not use 8-bit bytestrings unless you use a text_factory that
can interpret 8-bit bytestrings (like text_factory = str). It is highly
recommended that you instead just switch your application to Unicode
strings.

发出原因:

问题在用Python的sqlite3操作数据库要插入的字符串中蕴藏非ascii字符时暴发,做插入的时候就报当前这么些荒唐。

化解措施:

1. 按提示

connection = sqlite3.connect(...)
connection.text_factory = str

不过一旦字符中冒出非ascii字符,那么仍旧不可能迎刃而解问题,会暴发不可预知的乱码,这样可以参考
2

2. 以utf8的编码格式举行解码转为unicode编码做插入

cursor.execute('''
    INSERT INTO JAVBUS_DATA (姓名, 年龄)
    VALUES (?, ?)
    ''', ('张三'.decode('utf-8'), '22岁'.decode('utf-8')))

唯独假若数额太长,这样一个一个敲挺辛苦的,上面是一个行使map函数简化的小例子

#-*-coding:utf-8-*-
import sqlite3

def decode_utf8(aStr):
    return aStr.decode('utf-8')

conn = sqlite3.connect("something.db")
cursor = conn.cursor()

cursor.execute('''
    CREATE TABLE IF NOT EXISTS JAVBUS_DATA(
        id       INT PRIMARY KEY,
        姓名     TEXT,
        年龄     TEXT);''')
print "Table created successfully"
cursor.execute('''
    INSERT INTO JAVBUS_DATA (姓名, 年龄)
    VALUES (?, ?)
    ''', map(decode_utf8, ('张三', '22岁')))

cursor.close()
conn.commit()
conn.close()

其他注意:

奇迹用第两种艺术会产出UnicodeDecodeError
加入#--coding:utf-8-
要么不行请sys指定编码:

import sys  
reload(sys)  
sys.setdefaultencoding('utf8') 

其一题目在python3相应不会现出,python2编码问题,仅作记录

网站地图xml地图