#-*-encoding:utf-8-*- import sqlite3 def 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,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 sqlite3 def create_tables(dbname): conn = sqlite3.connect(dbname) cursor = conn.cursor() cursor.execute('''create table userinfo(name text,'qq@example.com') conn = sqlite3.connect(dbname) conn.text_factory = str ##!!! cursor = conn.cursor() cursor.execute("insert into userinfo(name,)): 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)
#-*-encoding:utf-8-*- import sqlite3 def 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'),)): 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)