Python和SQLite问题,怎么解决 python连接sqlite3出错

python sqlite3 \u600e\u4e48\u5904\u7406

\u8981\u64cd\u4f5c\u5173\u7cfb\u6570\u636e\u5e93\uff0c\u9996\u5148\u9700\u8981\u8fde\u63a5\u5230\u6570\u636e\u5e93\uff0c\u4e00\u4e2a\u6570\u636e\u5e93\u8fde\u63a5\u79f0\u4e3aConnection\uff1b\u8fde\u63a5\u5230\u6570\u636e\u5e93\u540e\uff0c\u9700\u8981\u6253\u5f00\u6e38\u6807\uff0c\u79f0\u4e4b\u4e3aCursor\uff0c\u901a\u8fc7Cursor\u6267\u884cSQL\u8bed\u53e5\uff0c\u7136\u540e\uff0c\u83b7\u5f97\u6267\u884c\u7ed3\u679c\u3002Python\u5b9a\u4e49\u4e86\u4e00\u5957\u64cd\u4f5c\u6570\u636e\u5e93\u7684API\u63a5\u53e3\uff0c\u4efb\u4f55\u6570\u636e\u5e93\u8981\u8fde\u63a5\u5230Python\uff0c\u53ea\u9700\u8981\u63d0\u4f9b\u7b26\u5408Python\u6807\u51c6\u7684\u6570\u636e\u5e93\u9a71\u52a8\u5373\u53ef\u3002# \u5bfc\u5165SQLite\u9a71\u52a8:>>> import sqlite3# \u8fde\u63a5\u5230SQLite\u6570\u636e\u5e93# \u6570\u636e\u5e93\u6587\u4ef6\u662ftest.db# \u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\uff0c\u4f1a\u81ea\u52a8\u5728\u5f53\u524d\u76ee\u5f55\u521b\u5efa:>>> conn = sqlite3.connect('test.db')# \u521b\u5efa\u4e00\u4e2aCursor:>>> cursor = conn.cursor()# \u6267\u884c\u4e00\u6761SQL\u8bed\u53e5\uff0c\u521b\u5efauser\u8868:>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')# \u7ee7\u7eed\u6267\u884c\u4e00\u6761SQL\u8bed\u53e5\uff0c\u63d2\u5165\u4e00\u6761\u8bb0\u5f55:>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')# \u901a\u8fc7rowcount\u83b7\u5f97\u63d2\u5165\u7684\u884c\u6570:>>> cursor.rowcount1# \u5173\u95edCursor:>>> cursor.close()# \u63d0\u4ea4\u4e8b\u52a1:>>> conn.commit()# \u5173\u95edConnection:>>> conn.close() \u63a8\u8350\u5b66\u4e60\u8d44\u6599\uff1ahttp://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001388320596292f925f46d56ef4c80a1c9d8e47e2d5711000

sqlite\u9700\u8981\u53e6\u5916\u5b89\u88c5\u5417,\u88c5\u597dpython\u5c31\u6709\u4e86\u3002
\u68c0\u67e5\u51fa\u95ee\u9898\u7684\u6587\u4ef6\u6240\u5728\u7684\u6587\u4ef6\u5939\uff0c\u6709\u6ca1\u6709sqlite3\u5f00\u5934\u7684\u6587\u4ef6\uff0c\u5982\u6709\u5c31\u6539\u6587\u4ef6\u540d\uff0c\u9664\u4e86\u8fd9\u4e2a\u6211\u5c31\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48\u4e00\u4e2a\u6587\u4ef6\u6b63\u5e38\u800c\u53e6\u4e00\u4e2a\u6587\u4ef6\u9519\u8bef\uff0c\u5982\u679c\u4ee3\u7801\u6b63\u786e\u7684\u8bdd

python编码如果把中文数据存储至sqlite数据库某一字段中,再通过查询语句取出并进行相关的字符串操作时,经常会出现错误提示,类似于UnicodeDecodeError,提示某一类型编码不能转换。

出现这个问题的原因是因为python默认使用unicode处理sqlite3的TEXT类型(varchar类型也是如此,因为在sqlite中varchar其实就是TEXT)。python把中文存入数据库时使用了类似于GBK这样的编码,取出时会尝试把TEXT类型数据转换成unicode,从而出现错误。
由此导致的另一个不容易发现的错误是存储在数据库中的中文进行了base64之类的编码,在python中取出时不会存在错误,但是再进行base64解码,并与sqlite3中取出的其它text字段进行字符串拼接等处理,就出现编码转换错误,很难发现问题原因,可以把其它text字段进行如'aaa'.encode('gbk')编码成GBK码解决,但不提倡这种方法,更好方法如下:
解决方法是python连接sqlite数据库后进行如下设置:
conn = sqlite3.connection(“……”)
conn.text_factory = str
另外为了python代码中硬编码的中文字符串不出现问题,除了在源码开始添加
# -*- coding:utf-8 -*-
还要设置python源码的编码为utf-8
import sys
reload(sys)
sys.setdefaultencode('utf8')

  • python灏唖hape杞sqlite
    绛旓細python灏唖hape杞sqlite鏂规硶濡備笅锛1銆侀氳繃connect鏂规硶杩斿洖鐨刢on瀵硅薄锛屽氨鏄暟鎹簱杩炴帴瀵硅薄锛宻qlite3妯″潡涓娇鐢╟onnect鏂规硶鍒涘缓锛屾墦寮鏁版嵁搴擄紝闇瑕佹寚瀹氭暟鎹簱璺緞銆2銆佺敤鏉ヤ粠缁撴灉涓彇涓鏉¤褰曪紝骞跺皢娓告爣鎸囧悜涓嬩竴鏉¤褰曞嵆鍙
  • 鍐欎簡涓涓python绋嬪簭,鏁版嵁搴撶敤鐨勬槸sqlite,浠庢暟鎹簱涓彇鍑篴ccount鐨勬暟鎹...
    绛旓細import mysqldb conn=mysqldb.connect(user='root',passwd='pwd',host='127.0.0.1',db='python_test')cur=conn.cursor()cur.execute("select from users where uid='101'and login='ong'")uid 鏄綘鐨勫瘑鐮 锛沴ogin鏄綘鐨勭敤鎴峰悕 num=0 for data in cur.fetchall():num=num+1 print data...
  • python闂姹傛暀:sqlite3.ProgrammingError: Cannot operate on a clos...
    绛旓細fund_list = cur.execute(sql)璇曡瘯鏀规垚涓嬮潰鐨 fund_list = [x for x in cur.execute(sql)]
  • Python涓璖QLite鏀寔鏁版嵁搴撹繙绋嬭闂悧
    绛旓細涓嶆敮鎸併sqlite鏄釜鍗曟満鏂囦欢寮忕殑鍏崇郴鍨嬫暟鎹簱銆備笉鏀寔澶氱敤鎴枫傚洜姝よ琚繙绋嬭闂殑璇濓紝蹇呴』鍐嶅寘涓灞俉EB鏈嶅姟锛岄氳繃HTTP鍗忚璁块棶銆傛瘮濡侱jango杩欎釜WEB妗嗘灦灏卞彲鏀寔鐢╯qlite鍋氬悗绔暟鎹簱鍦ㄦ湇鍔″櫒涓婅繍琛屻備笉鐒跺彧鑳介塵ysql 鎴 Postgresql
  • 璇烽棶鍦ㄥ皢python鏁版嵁瀛樺叆sqlite3涓嚭鐜皊qlite unrecognized token...
    绛旓細鍦ㄥ線SQLite鎻掑叆鍗曞紩鍙锋椂鍑虹幇閿欒锛屾牴鎹彁绀烘槸鐨闂锛岀粡杩囩爺绌跺彂鐜帮紝SQLite杞箟鈥樺崟寮曞彿锛屾槸灏嗕竴涓崟寮曞彿鈥樿浆涔夋垚涓衡樷橈紙涓や釜鍗曞紩鍙凤級鈥︾敤str_repace鏇挎崲涓嬶細$safeword=str_replace("鈥","鈥樷",$safeword);灏辫浜
  • python涓璼qlite鏌ヨselect
    绛旓細-*- coding: utf-8 -*- import sqlite3 杩炴帴鏁版嵁搴 con = sqlite3.connect("cpu.db")cur = con.cursor()name = 'RPi.CPU'鏌ヨ璁板綍鎬绘暟 cur.execute("select count(*) from temps where name=(?);", (name, ))total = cur.fetchone()
  • 濡備綍鍦python绋嬪簭涓煡鐪sqlite3鏌愭暟鎹簱涓殑琛ㄥ悕
    绛旓細sqlite3鏁版嵁搴撻噷琛ㄧ殑淇℃伅瀛樺偍鍦ㄤ簡涓涓悕涓簊qlite_master鐨勮〃涓 鍥犳鍙互閫氳繃杩欐潯璇彞鏉ユ煡鐪嬫暟鎹簱涓墍鏈夎〃鐨勫悕绉 SELECT name FROM sqlite_master WHERE type='table';涓嬮潰鏄Python鐨鐢ㄦ硶 con = sqlite3.connect('database.db')cursor = con.cursor()cursor.execute("SELECT name FROM sqlite_master ...
  • python鐖櫕,淇濆瓨鍒sqlite鍑虹幇濡傚浘閿欒,鎬庝箞瑙e喅鍛?
    绛旓細濡傚浘鎵绀轰慨鏀硅瘯璇
  • python 鍋氫竴涓浘涔︾鐞嗙郴缁,鏁版嵁搴:sqlite
    绛旓細瀛楃闆嗙殑闂鍟婏紝鏁版嵁搴撻噷闈㈠簲璇ラ粯璁ゆ槸UTF8缂栫爜銆備綘杈撳叆鐨勫弬鏁版湁涓枃锛屾渶濂借浆鎹负UTF8锛屼綘鏌ユ煡PYTHON 瀛楃闆嗐備笉鍚屽瓧绗﹂泦鐜涓嬭繍琛岀粨鏋滀笉鍚岋紝寤鸿鍙傝冿細http://blog.csdn.net/a285699732/article/details/7679293 寤鸿SQL鐢↙IKE锛屾湁鏃跺欒緭鍏ュ浜嗙┖鏍兼煡涓嶅埌鐨勶紝鍘婚櫎绌烘牸鍚庢煡璇
  • 鍏充簬Python鎿嶄綔SQLite鐨鏁版嵁搴闂,鎬庝箞鍐欎竴涓暟鎹簱鏌ヨ,(灏辨槸濡傛灉鏁 ...
    绛旓細蹇呴』鍏堣鍙栨暟鎹紝鐒跺悗鍐嶅叧闂父鏍囷紝鍚﹀垯灏辫涓嶅嚭鏁版嵁銆備綘鐨刣bfind鍑芥暟閲屽簲璇ュ湪execute涔嬪悗灏辫繘琛屾暟鎹煡璇紝鐒跺悗鍐嶆墽琛宑.close(),鍚﹀垯灏辫涓嶅嚭鏁版嵁锛岃屼笖浼氬嚭閿
  • 扩展阅读:python培训班学费一般多少 ... python中sqlite3用法 ... python sqlite orm ... python sqlite mapping ... 学python有前途吗 ... c++和python先学哪个 ... 学python后到底能干什么 ... python sqlite 加密 ... python初学编程必背 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网