在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标准库之随机数 (math包、random包)介绍
Nov 25 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
实时获取Python的print输出流方法
Jan 07 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
virtualenv介绍及简明教程
Jun 23 Python
详解Python openpyxl库的基本应用
Feb 26 Python
编写python程序的90条建议
Apr 14 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
一个程序下载的管理程序(三)
2006/10/09 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
TextArea不支持maxlength的解决办法(jquery)
2011/09/13 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
微信小程序实现漂亮的弹窗效果
2020/05/26 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[01:05:00]2018国际邀请赛 表演赛 Pain vs OpenAI
2018/08/24 DOTA
python实现百度关键词排名查询
2014/03/30 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
找工作最新求职信
2013/12/22 职场文书
初中化学教学反思
2014/01/23 职场文书
经典英文广告词
2014/03/18 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
工作收入证明模板
2015/06/12 职场文书
应收账款管理制度
2015/08/06 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android
浅谈MySql整型索引和字符串索引失效或隐式转换问题
2021/11/20 MySQL