在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 序列的方法总结
Oct 18 Python
对Python 内建函数和保留字详解
Oct 15 Python
详解Python sys.argv使用方法
May 10 Python
对Python中画图时候的线类型详解
Jul 07 Python
python实现WebSocket服务端过程解析
Oct 18 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
如何在Python 游戏中模拟引力
Mar 27 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
Python如何创建装饰器时保留函数元信息
Aug 07 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Python用access判断文件是否被占用的实例方法
Dec 17 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
laravel请求参数校验方法
2019/10/10 PHP
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
使用jquery制作弹出框效果
2015/04/03 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
python数据结构之图的实现方法
2015/07/08 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python中函数参数调用方式分析
2018/08/09 Python
对python的unittest架构公共参数token提取方法详解
2018/12/17 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
Python中求对数方法总结
2020/03/10 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
建筑设计师岗位职责
2013/11/18 职场文书
个人自我评价分享
2013/12/20 职场文书
元旦晚会策划方案
2014/02/18 职场文书
工作决心书范文
2014/03/11 职场文书
员工入职担保书范文
2014/04/01 职场文书
《悯农》教学反思
2014/04/28 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
食品安全演讲稿
2014/09/01 职场文书
股权转让协议书
2014/12/07 职场文书
张丽莉观后感
2015/06/16 职场文书