Python操作SQLite数据库的方法详解


Posted in Python onJune 16, 2017

本文实例讲述了Python操作SQLite数据库的方法。分享给大家供大家参考,具体如下:

SQLite简单介绍

SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

安装与使用

1.导入Python SQLITE数据库模块

     Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~

import sqlite3

2. 创建/打开数据库

     在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

cx = sqlite3.connect("E:/test.db")

     也可以创建数据库在内存中。

con = sqlite3.connect(":memory:")

3.数据库连接对象

    打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

① commit()--事务提交  
② rollback()--事务回滚  
③ close()--关闭一个数据库连接  
④ cursor()--创建一个游标

    关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。

4.使用游标查询数据库

我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。

cu=cx.cursor()

游标对象有以下的操作:

① execute()--执行sql语句  
② executemany--执行多条sql语句  
③ close()--关闭游标  
④ fetchone()--从结果中取一条记录,并将游标指向下一条记录  
⑤ fetchmany()--从结果中取多条记录  
⑥ fetchall()--从结果中取出所有记录  
⑦ scroll()--游标滚动

1. 建表

cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。

2. 插入数据

请注意避免以下写法:

# Never do this -- insecure 会导致注入攻击
pid=200
c.execute("... where pid = '%s'" % pid)

正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)

简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.

cx.commit()

3.查询

cu.execute("select * from catalog")

要提取查询到的数据,使用游标的fetch函数,如:

In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.

4.修改

In [12]: cu.execute("update catalog set name='Boy' where id = 0")
In [13]: cx.commit()

注意,修改数据以后提交

5.删除

cu.execute("delete from catalog where id = 1") 
cx.commit()

6.使用中文

请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u

x=u'鱼'
cu.execute("update catalog set name=? where id = 0",x)
cu.execute("select * from catalog")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

如果要显示出中文字体,那需要依次打印出每个字符串

In [26]: for item in cu.fetchall():
  ....:   for element in item:
  ....:     print element,
  ....:   print
  ....: 
0 10 鱼 Yu
1 20 cba Xu

7.Row类型

Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 原文如下:

sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution.

Row对象的详细介绍

class sqlite3.Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys()
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.

下面举例说明

In [30]: cx.row_factory = sqlite3.Row
In [31]: c = cx.cursor()
In [32]: c.execute('select * from catalog')
Out[32]: <sqlite3.Cursor object at 0x05666680>
In [33]: r = c.fetchone()
In [34]: type(r)
Out[34]: <type 'sqlite3.Row'>
In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>
In [36]: print r
(0, 10, u'\u9c7c', u'Yu')
In [37]: len(r)
Out[37]: 4
In [39]: r[2]      #使用索引查询
Out[39]: u'\u9c7c'
In [41]: r.keys()
Out[41]: ['id', 'pid', 'name', 'nickname']
In [42]: for e in r:
  ....:   print e,
  ....: 
0 10 鱼 Yu

使用列的关键词查询

In [43]: r['id']
Out[43]: 0
In [44]: r['name']
Out[44]: u'\u9c7c'

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在python win系统下 打开TXT文件的实例
Apr 29 Python
python 自动批量打开网页的示例
Feb 21 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
anaconda如何查看并管理python环境
Jul 05 Python
Python 计算任意两向量之间的夹角方法
Jul 05 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
python pprint模块中print()和pprint()两者的区别
Feb 10 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
使用Python实现NBA球员数据查询小程序功能
Nov 09 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
使用python实现个性化词云的方法
Jun 16 #Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 #Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 #Python
Python中关于Sequence切片的下标问题详解
Jun 15 #Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 #Python
带你了解python装饰器
Jun 15 #Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 #Python
You might like
file_get_contents(&quot;php://input&quot;, &quot;r&quot;)实例介绍
2013/07/01 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
关于laravel框架中的常用目录路径函数
2019/10/23 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
javascript options属性集合操作代码
2009/12/28 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Vue2路由动画效果的实现代码
2017/07/10 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
[51:34]Ti4主赛事胜者组 DK vs EG 2
2014/07/19 DOTA
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
python 判断网络连通的实现方法
2018/04/22 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
python命令行参数用法实例分析
2019/06/25 Python
wxPython实现列表增删改查功能
2019/11/19 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
学生自我鉴定
2013/12/18 职场文书
三八活动策划方案
2014/08/17 职场文书
高中班长竞选稿
2015/11/20 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python