问题出现:

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编码问题,仅作记录

ProgrammingError: You must not use 8-bit bytestrings...的更多相关文章

  1. Python sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings......

    完整的错误信息如下: You must not use 8-bit bytestrings unless you use a text _factory that can interpret 8-bi ...

  2. [Python]sqlite3二进制文件存储问题(BLOB)(You must not use 8-bit bytestrings unless you use a text_factory...)

    事情是这种: 博主尝试用Python的sqlite3数据库存放加密后的usernamepassword信息,表是这种 CREATE TABLE IF NOT EXISTS user ( userID ...

  3. Django操作model时刻,一个错误:AttributeError:’ProgrammingError’ object has no attribute ‘__traceback__’

    原因:在Django项目下对应的应用以下的models.py配置的model(也就是class)没有创建成对应的表. 这是怎么回事呢? 首先,将models.py里面的model创建成相应的数据库表的 ...

  4. pymysql.err.ProgrammingError: 1064 (Python字符串转义问题)

    代码: sql = """INSERT INTO video_info(video_id, title) VALUES("%s","%s&q ...

  5. django.db.utils.ProgrammingError: 1146 的解决办法

    在models中设置完数据库相关的东西后执行命令 python manage.py makemigrations 此处无错误 再次执行 python manage.py migrate 发生报错 错误 ...

  6. django.db.utils.ProgrammingError: (1146, "Table 'db_gold.user_ip_info' doesn't exist") RuntimeError: Model class scanhosts.models.HostLoginInfo doesn't declare an explicit app_label and isn't in an a

    Error Msg 创建了一个apps的目录将所有app放入apps文件中, 将apps路径加入sys.path中:sys.insert(0, os.path.join(BASE_DIR, " ...

  7. sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError)

    在我学习flask建立网站时间碰到了一个棘手的问题,就是在我进行操作日志的更新时间,发现表格建立有点错误,导致表缺失,从而报了下面的错误 sqlalchemy.exc.ProgrammingError ...

  8. pymysql.err.ProgrammingError: (1064)(字符串转译问题)

    代码: sql = "insert into dm_copy(演出类型,演出场馆,剧目名称,演出地点,演出时间,演出票价,演出团体,创建时间, url)values('%s','%s','% ...

  9. django.db.utils.ProgrammingError: 1146 解决办法

    出现原因: 因为直接在mysql中删除了表或者在执行过一次迁移后,在modles中修改了表名及对应的方法和引用 产生后果: 1.迁移的过程中可能出现表不存在的报错情况 2.迁移过程没有报错,在admi ...

随机推荐

  1. SpringBoot+SpringCloud实现登录用户信息在微服务之间的传递

    实现思路: 1:准备一个ThreadLocal变量,供线程之间共享. 2:每个微服务对所有过来的Feign调用进行过滤,然后从请求头中获取User用户信息,并存在ThreadLocal变量中. 3:每 ...

  2. 《大话设计模式》c++实现 之策略模式

    一.UML图   二.概念 策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户.   三.优点 (1)策略模式是一种定义一系列算法的方法,从 ...

  3. Mvcpager以下各节已定义,但尚未为布局页“~/Views/Shared/_Layout.cshtml”呈现:“Scripts”。

    解决办法如下: 1.在_Layout.cshtml布局body内,添加section,Scripts.Render和RenderSection标签示例代码如下: <body class=&quo ...

  4. centos下jdk、jre安装

    1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java [root@localhost ~]# cd /usr/java 2.下载jdk,然后解压 ...

  5. 20155228 2017-5-10 课堂测试:MySort

    20155228 2017-5-10 课堂测试:MySort 题目和要求 模拟实现Linux下Sort-t:-k2的功能.参考Sort的实现.提交码云链接和代码运行截图. import java.ut ...

  6. pycharm的版本对应问题

    如果版本不对应往往会出现很多问题,需要各种方法才能解决,现记录一下我工作中遇到的版本问题,以下版本一般情况下是可以直接安装使用的. 目前一直在使用的版本:

  7. python之小数据池

    代码块 Python 程序 是由代码块构造的.块是一个python程序的文本,它是作为一个执行单元的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  8. 利用sqoop将hive数据导入导出数据到mysql

    一.导入导出数据库常用命令语句 1)列出mysql数据库中的所有数据库命令  #  sqoop list-databases --connect jdbc:mysql://localhost:3306 ...

  9. python locust 性能测试:locust安装和一些参数介绍

    安装参考 https://www.cnblogs.com/fnng/p/6081798.html <虫师大大的,很详细> ps:python3.7暂不支持locust:python3安装建 ...

  10. 洛谷 P1015 回文数

    #include<iostream> #include<cstdio> #include<cmath> #include<string> #includ ...