在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 提取文件的小程序
Jul 29 Python
详解Django 中是否使用时区的区别
Jun 14 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
简单了解Python matplotlib线的属性
Jun 29 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
python对常见数据类型的遍历解析
Aug 27 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
Oct 23 Python
Pytorch之保存读取模型实例
Dec 30 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
Python实现遗传算法(二进制编码)求函数最优值方式
Feb 11 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php获取某个目录大小的代码
2008/09/10 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[56:18]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第二局
2016/03/05 DOTA
Python部署web开发程序的几种方法
2017/05/05 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
深入浅析python with语句简介
2018/04/11 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python如何将模块打包并发布
2020/08/30 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
学生爱国演讲稿
2014/01/14 职场文书
推广普通话演讲稿
2014/05/23 职场文书
建设工地安全标语
2014/06/07 职场文书
客户付款通知书
2015/04/23 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
Golang实现AES对称加密的过程详解
2021/05/20 Golang
浅谈react useEffect闭包的坑
2021/06/08 Javascript
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
Python面试不修改数组找出重复的数字
2022/05/20 Python