博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在sqlite3中插入中文字符
阅读量:7112 次
发布时间:2019-06-28

本文共 3856 字,大约阅读时间需要 12 分钟。

hot3.png

使了一下sqlite3,如下:
#-*-encoding:utf-8-*-import sqlite3def create_tables(dbname):      conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''create table userinfo(name text, email text)''')    conn.commit()    cursor.close()    conn.close()    def drop_tables(dbname):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''drop table userinfo''')    conn.commit()    cursor.close()    conn.close()def insert():    users = ('腾讯qq', 'qq@example.com')    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute("insert into userinfo(name, email) values(?, ?)", users)    conn.commit()    cursor.close()    conn.close()    def select(text):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    print "select name from userinfo where email='%s'" % text    for row in cursor.execute("select name from userinfo where email= ? ", (text,)):        print row[0]        if __name__ == '__main__':    dbname = 'test.db'    try:        drop_tables(dbname)    except:        pass    create_tables(dbname)    insert()    select("qq@example.com")    drop_tables(dbname)

运行时出现下面的错误:

cursor.execute("insert into userinfo(name, email) values(?, ?)", users)sqlite3.ProgrammingError: 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.

有两种方法解决:
第一种,设置text_factory = str
#-*-encoding:utf-8-*-import sqlite3def create_tables(dbname):      conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''create table userinfo(name text, email text)''')    conn.commit()    cursor.close()    conn.close()    def drop_tables(dbname):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''drop table userinfo''')    conn.commit()    cursor.close()    conn.close()def insert():    users = ('腾讯qq', 'qq@example.com')    conn = sqlite3.connect(dbname)    conn.text_factory = str  ##!!!    cursor = conn.cursor()    cursor.execute("insert into userinfo(name, email) values(?, ?)", users)    conn.commit()    cursor.close()    conn.close()    def select(text):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    print "select name from userinfo where email='%s'" % text    for row in cursor.execute("select name from userinfo where email= ? ", (text,)):        print row[0]        if __name__ == '__main__':    dbname = 'test.db'    try:        drop_tables(dbname)    except:        pass    create_tables(dbname)    insert()    select("qq@example.com")    drop_tables(dbname)

第二种,把插入的数据转换为unicode:
#-*-encoding:utf-8-*-import sqlite3def create_tables(dbname):      conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''create table userinfo(name text, email text)''')    conn.commit()    cursor.close()    conn.close()    def drop_tables(dbname):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute('''drop table userinfo''')    conn.commit()    cursor.close()    conn.close()def insert():    users = ('腾讯qq'.decode('utf8'), 'qq@example.com')    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    cursor.execute("insert into userinfo(name, email) values(?, ?)", users)    conn.commit()    cursor.close()    conn.close()    def select(text):    conn = sqlite3.connect(dbname)    cursor = conn.cursor()    print "select name from userinfo where email='%s'" % text    for row in cursor.execute("select name from userinfo where email= ? ", (text,)):        print row[0].encode('utf8')        if __name__ == '__main__':    dbname = 'test.db'    try:        drop_tables(dbname)    except:        pass    create_tables(dbname)    insert()    select("qq@example.com")    drop_tables(dbname)

转载于:https://my.oschina.net/letiantian/blog/217770

你可能感兴趣的文章
Android手机终端使用Curl命令
查看>>
前端进击的巨人(八):浅谈函数防抖与节流
查看>>
后端开发面经
查看>>
使用Envoy 作Sidecar Proxy的微服务模式-3.分布式追踪
查看>>
焦虑、不安
查看>>
this是什么以及如何判断它
查看>>
【Go】string 优化误区及建议
查看>>
Perseus-BERT——业内性能极致优化的BERT训练方案【阿里云弹性人工智能】
查看>>
酷狗音乐快速转换MP3格式的方法
查看>>
原生JS 实现复杂对象深拷贝(对象值包含函数)
查看>>
优化体系结构 - 算法外置优化计算结构
查看>>
jqGrid的rowNum属性默认值、-1情况的介绍
查看>>
你应该知道的数据库数据类型及其设计原则
查看>>
解决vue报错Failed to mount component
查看>>
[LeetCode] 124. Binary Tree Maximum Path Sum
查看>>
活学活用! 用Local Storage实现多人聊天室
查看>>
一次爬虫实践记录
查看>>
炫酷粒子表白,双十一脱单靠它了!
查看>>
mysql锁以及实践总结
查看>>
【工具】MongoDB 与可视化工具 adminMongo 的安装、启动与连接
查看>>