在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中编写ORM框架的入门指引
Apr 29 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
python2 与python3的print区别小结
Jan 16 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
Python处理命令行参数模块optpars用法实例分析
May 31 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
django-初始配置(纯手写)详解
Jul 30 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
如何理解python对象
Jun 21 Python
Pygame框架实现飞机大战
Aug 07 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
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
2017/07/06 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
使用Python处理BAM的方法
2018/09/28 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
python列表切片和嵌套列表取值操作详解
2020/02/27 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
年度献血先进个人事迹材料
2014/02/14 职场文书
学校食品安全实施方案
2014/06/14 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
办公室主任岗位职责
2015/01/31 职场文书
圣诞晚会主持词开场白
2015/05/28 职场文书
心理健康教育主题班会
2015/08/13 职场文书
2016关于军训的心得体会
2016/01/11 职场文书