在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抓取网页内容示例分享
Feb 24 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
opencv与numpy的图像基本操作
Mar 08 Python
Python代码实现删除一个list里面重复元素的方法
Apr 02 Python
python函数局部变量、全局变量、递归知识点总结
Nov 15 Python
Python字符串、列表、元组、字典、集合的补充实例详解
Dec 20 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
tensorflow如何继续训练之前保存的模型实例
Jan 21 Python
在Python中通过threshold创建mask方式
Feb 19 Python
什么是python的必选参数
Jun 21 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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
php function用法如何递归及return和echo区别
2014/03/07 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
smarty简单应用实例
2015/11/03 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
《与孩子一起学编程》python自测题
2018/05/27 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
PyTorch中permute的用法详解
2019/12/30 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
html5 div布局与table布局详解
2016/11/16 HTML / CSS
学校对教师的评语
2014/04/28 职场文书
平安建设工作方案
2014/06/02 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
社区服务活动报告
2015/02/05 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
小马王观后感
2015/06/11 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
Nebula Graph解决风控业务实践
2022/03/31 MySQL
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle