在Python中使用SQLite的简单教程


Posted in Python onApril 29, 2015

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

在使用SQLite前,我们先要搞清楚几个概念:

表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。

要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection;

连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。

Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。

由于SQLite的驱动内置在Python标准库中,所以我们可以直接来操作SQLite数据库。

我们在Python交互式命令行实践一下:

# 导入SQLite驱动:
>>> import sqlite3
# 连接到SQLite数据库
# 数据库文件是test.db
# 如果文件不存在,会自动在当前目录创建:
>>> conn = sqlite3.connect('test.db')
# 创建一个Cursor:
>>> cursor = conn.cursor()
# 执行一条SQL语句,创建user表:
>>> cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
<sqlite3.Cursor object at 0x10f8aa260>
# 继续执行一条SQL语句,插入一条记录:
>>> cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')
<sqlite3.Cursor object at 0x10f8aa260>
# 通过rowcount获得插入的行数:
>>> cursor.rowcount
1
# 关闭Cursor:
>>> cursor.close()
# 提交事务:
>>> conn.commit()
# 关闭Connection:
>>> conn.close()

我们再试试查询记录:

>>> conn = sqlite3.connect('test.db')
>>> cursor = conn.cursor()
# 执行查询语句:
>>> cursor.execute('select * from user where id=?', '1')
<sqlite3.Cursor object at 0x10f8aa340>
# 获得查询结果集:
>>> values = cursor.fetchall()
>>> values
[(u'1', u'Michael')]
>>> cursor.close()
>>> conn.close()

使用Python的DB-API时,只要搞清楚Connection和Cursor对象,打开后一定记得关闭,就可以放心地使用。

使用Cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数,就可以拿到执行结果。

使用Cursor对象执行select语句时,通过featchall()可以拿到结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录。

如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须对应几个参数,例如:

cursor.execute('select * from user where id=?', '1')

SQLite支持常见的标准SQL语句以及几种常见的数据类型。具体文档请参阅SQLite官方网站。
小结

在Python中操作数据库时,要先导入数据库对应的驱动,然后,通过Connection对象和Cursor对象操作数据。

要确保打开的Connection对象和Cursor对象都正确地被关闭,否则,资源就会泄露。

如何才能确保出错的情况下也关闭掉Connection对象和Cursor对象呢?请回忆try:...except:...finally:...的用法。

Python 相关文章推荐
Python中返回字典键的值的values()方法使用
May 22 Python
Python的包管理器pip更换软件源的方法详解
Jun 20 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python requests 测试代理ip是否生效
Jul 25 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
Python 列表推导式需要注意的地方
Oct 23 Python
在Python中使用poplib模块收取邮件的教程
Apr 29 #Python
python实现简单的socket server实例
Apr 29 #Python
详细讲解用Python发送SMTP邮件的教程
Apr 29 #Python
python实现可将字符转换成大写的tcp服务器实例
Apr 29 #Python
python实现对一个完整url进行分割的方法
Apr 29 #Python
python打开url并按指定块读取网页内容的方法
Apr 29 #Python
在Python下进行UDP网络编程的教程
Apr 29 #Python
You might like
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
php实现图片以base64显示的方法
2016/10/13 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
python opencv实现图像配准与比较
2021/02/09 Python
如何理解委托
2012/01/06 面试题
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
创业融资计划书
2014/04/25 职场文书
承诺书格式
2014/06/03 职场文书
裁员通知
2015/04/25 职场文书
领导视察通讯稿
2015/07/18 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
TS 类型收窄教程示例详解
2022/09/23 Javascript