`
iihero
  • 浏览: 249232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python用法:处理sqlite中的中文字符时遇到的问题

阅读更多

作为初学才,学起python,是挺快,但是也不免常常出些小错。在访问sqlite3的时候,我写了下边的测试代码。

文件test.py是utf-8编码的,OK,结果没问题。

#!/usr/bin/envpython
#
coding=utf-8

importsqlite3

#con=sqlite3.connect(r"sqlite.db")
con=sqlite3.connect(r"e: estsqlite3.db")
#con.text_factory=str
cur=con.cursor()
#cur.execute("insertintobasvslvoy(vslcode,voyage,vslename)values(?,?,?)",(u'tt',u'tt',u'tt'))
cur.execute("insertintot1values(?,?)",(10,u'中文测试gbk10'))
con.commit()
cur.execute(u
"select*fromt1wherecol2like'中%'")
forrowincur.fetchall():
printrow[0],row[1].encode('gbk')

con.close()

结果如下:

Processstarted>>>
10中文测试gbk10
10中文测试gbk10
5
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10
10中文测试gbk10<<<Processfinished.

可是,当我把文件编码调整成ansi格式的时候,上边程序没办法跑。
结果将文件内容改成下边的样子:

#!/usr/bin/envpython
#
coding=utf-8

importsqlite3

#con=sqlite3.connect(r"sqlite.db")
con=sqlite3.connect(r"e: estsqlite3.db")
#con.text_factory=str
cur=con.cursor()
#cur.execute("insertintobasvslvoy(vslcode,voyage,vslename)values(?,?,?)",(u'tt',u'tt',u'tt'))
cur.execute("insertintot1values(?,?)",(10,'中文测试gbk10'.decode('gbk')))
con.commit()
cur.execute(
"select*fromt1wherecol2like'"+''.decode('gbk')+"%'")
forrowincur.fetchall():
printrow[0],row[1].encode('gbk')


con.close()

这样,出现的结果跟上边一样。
问题的关键就是#coding=utf-8,同时文件编码也要是utf-8,才能让结果保持一致。
看看下边的简单例子就知道:

>>>a='中文'
>>>b=u'中文'
>>>a
'ÖÐÎÄ'
>>>b
u
'中文'
>>>a.decode('gbk')
u
'中文'
>>>b==a.decode('gbk')
True

如果将上边的例子放到一个.py文件当中,分别采用utf-8编码和ansi编码('cp936'),结果可能就是分别为True和False。

 

分享到:
评论

相关推荐

    python入门教程大全.pdf 精心整理

    4.[python入门教程]Python3解决中文字符输出乱码的方法 5.[python入门教程]Python运行错误详解 6.[python入门教程]Python面试基础知识大全 7.[python入门教程]常用Python模版库大全 8.[python入门教程]在IIS下配置...

    python模块

    * decimal:python中的float使用双精度的二进制浮点编码来表示的,这种编码导致了小数不能被精确的表示,例如0.1实际上内存中为0.100000000000000001,还有3*0.1 == 0.3 为False. decimal就是为了解决类似的问题的,...

    Python中的简单SQL_API_python_代码_下载

    使用 aiosql,您可以在.sql文件中组织 SQL 语句,将它们作为调用方法加载到 python 应用程序中,而不会像使用任何其他 SQL 文件一样失去使用它们的能力。 该项目支持开箱即用的 SQLite 和 PostgreSQL 的标准和基于...

    Python Cookbook

    4.22 在表达式中处理异常 176 4.23 确保名字已经在给定模块中被定义 178 第5章 搜索和排序 180 引言 180 5.1 对字典排序 185 5.2 不区分大小写对字符串列表排序 185 5.3 根据对象的属性将对象列表排序 187 ...

    Python程序设计基础.docx

    熟练使用正则表达式处理字符串,熟练使用Python读写文本文件与二进制文件,了解Python程序的调试方法,熟练运用Python编写面向对象程序,掌握使用Python操作SQLite数据库的方法,掌Python+pandas进行数据处理的基本...

    python数据分析随书代码

    非常适合想要深入学习并使用Python进行数据分析的读者,无论是新手还是有一定Python使用基础的读者,都将快速成为一名数据分析专家。 作者简介 Ivan Idris,实验物理学硕士,学位论文侧重于应用计算机科学。毕业后...

    aiosql:Python中的简单SQL

    使用aiosql,您可以将SQL语句组织为.sql文件,将它们作为调用方法加载到python应用程序中,而又不会像其他任何SQL文件一样失去使用它们的能力。 该项目支持SQLite和PostgreSQL基于标准和基于的驱动程序( , , ,...

    pyqt-sql-demo:基于PyQt5SQL查询执行程序演示教程和参考。 使用DB-API和SQLite3。 使用pygments在QTextEdit中执行语法突出显示

    这是一个通过标准Python DB-API接口使用PyQT和SQLite的演示示例。 它被创建为用作教程或参考。 它使用QtWidgets作为接口,使用QTableView显示SQL查询结果,使用pygments突出显示语法,使用sqlite3进行数据库连接。 ...

    Python多个地产网数据爬虫.zip

    地产爬虫:使用python+requests库,抓取ajax请求返回的json数据。 直接字符串截取,采用python低级编程方法,存储到自带sqlite3数据库。 全程未设延迟,未设代理,未设cookie,使用时请自行添加反爬措施。

    matlab蓝色代码表示-knife:优雅的C++11语法糖,适用于使用Python,SQLite和Bash进行混合语言编程

    开发它的重点是实现简单自然的混合语言编程方法。 直接享受这些语言的优势。 如果需要以下语言的混合语言编程库,请使用Knife: 可以直接编写这些语言,而无需进行诸如初始化和终结之类的琐碎工作 避免sprintf(...)...

    Python基础教程(第3版)-201802出版-文字版

    久负盛名的 Python 入门经典针对 Python 3 全新升级十个出色的项目,让你尽快可以使用 Python 解决实际问题目录第 1章 快速上手:基础知识 ........................ 1 1.1 交互式解释器 .............................

    flow-results:流程结果的实现https

    流结果 用法 请参阅,以获取API端点的文档... 对于已安装的卷sqlite数据库,设置为sqlite:////path/to/volume/db.sqlite对于postgresql://host:port/db数据库,设置为postgresql://host:port/db ALLOWED_HOSTS 以逗号

    bookmark:简单的命令行浏览器独立书签实用程序

    查看此程序的一种方法是,将其视为bash的简单hashmap实用程序,该实用程序将一组字符串(标签)与另一个字符串(URL)相关联。 随意找到其他使用此程序的方法! 它基于sqlite数据库,但支持json或msgpack的输入/...

    plants-backend:基于Flask的RESTful数据库用于跟踪植物的应用程序

    请参阅config.py和config_local.py ,后者用于设置特定于环境的设置,例如数据库连接字符串,记录最低严重性或允许在开发环境中使用CORS 数据库 我正在使用SQLite。由于使用了SQLAlchemy(声明性系统),只需更改...

    datasette-ripgrep:Web界面,用于使用作为Datasette插件构建的ripgrep搜索代码

    Web界面,用于使用搜索您的代码, 是作为插件构建的 演示版 在试用该插件,您可以在其中跨Datasette的源代码和所属的所有datasette-*插件运行正则表达式搜索。 一些示例搜索: -正则表达式搜索with.*AsyncClient ...

    containerlab:用于启动docker实验室的网页

    使用Python交付一个Web界面,用于管理基于Docker的开源软件虚拟实验室。 该产品由Poc2Ops提供并维护。 目前,它仍在积极开发中。 用法 web.py展示了一个基于CherryPy的Web应用程序。 cleanup.py每隔两分钟删除所有...

    rss-bot-diasp:用于侨民的RSS机器人,支持多个用户和提要

    该机器人使用SQLite数据库存储配置和已发布的提要。 因此可以配置为在同一数据库中使用多个漫游器,并且不需要多个实例。 安装 跑步 pip install feedparser pip install facepy 安装feedDiasp依赖项。 跑步 git ...

    linq-MAC-Port:linq项目的Macintosh端口

    这种方法使使用C ++轻松开发面向数据库的程序变得更加容易。 您可以将此语言用作独立语言或C ++框架。 我开发此框架的理念是受JAVA编程语言和Python编程语言启发的。 数据类型有预构建类,称为数字字符串和十进制。...

    vs-tm-server

    默认情况下,数据使用Sqlite数据库存储,但可选地支持MySql。 数据被加载到基于会话的内存中,以加快搜索速度。 会话通过Cookie标头以及用户名和密码的身份验证进行管理。 翻译记忆库被分配了一个“所有者”,可以...

    Android应用开发揭秘pdf高清版

    8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Java 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 语音识别 9.3 GoogleMap 9.3.1 ...

Global site tag (gtag.js) - Google Analytics