在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 07 Python
python随机生成指定长度密码的方法
Apr 04 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python sorted函数的小练习及解答
Sep 18 Python
PYTHON如何读取和写入EXCEL里面的数据
Oct 28 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
python selenium操作cookie的实现
Mar 18 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
python实现剪贴板的操作
Jul 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
PHP 组件化编程技巧
2009/06/06 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
微信小程序上滑加载下拉刷新(onscrollLower)分批加载数据(二)
2017/05/11 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
three.js 入门案例详解
2018/01/23 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
python机器人行走步数问题的解决
2018/01/29 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Python面向对象实现方法总结
2020/08/12 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
教室布置标语
2014/06/26 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
吴仁宝观后感
2015/06/09 职场文书