在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实现图像识别功能
Jan 29 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
Python的in,is和id函数代码实例
Apr 18 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
python 写一个文件分发小程序
Dec 05 Python
python 基于selectors库实现文件上传与下载
Dec 31 Python
python实现代码审查自动回复消息
Feb 01 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
改造一台复古桌面收音机
2021/03/02 无线电
浅谈Windows下 PHP4.0与oracle 8的连接设置
2006/10/09 PHP
文章推荐系统(二)
2006/10/09 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
jquery Validation表单验证使用详解
2020/09/12 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
JavaScript验证知识整理
2017/03/24 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
python 图片验证码代码分享
2012/07/04 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
super关键字的用法
2012/04/10 面试题
数学系个人求职信范文
2014/01/30 职场文书
考核评语大全
2014/04/29 职场文书
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL