在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写的windows服务不能启动的问题
Apr 15 Python
Python实现的石头剪子布代码分享
Aug 22 Python
python使用webbrowser浏览指定url的方法
Apr 04 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
Python常见字典内建函数用法示例
May 14 Python
Flask框架工厂函数用法实例分析
May 25 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
详解python中groupby函数通俗易懂
May 14 Python
Python configparser模块应用过程解析
Aug 14 Python
python反爬虫方法的优缺点分析
Nov 25 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的面向对象编程
2006/10/09 PHP
PHP开发中常用的字符串操作函数
2011/02/08 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
浅谈PHP中的
2016/04/23 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
FireFox JavaScript全局Event对象
2009/06/14 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
2014/02/24 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
使用Python发现隐藏的wifi
2020/03/04 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
营销总监岗位职责范本
2014/02/26 职场文书
个人担保书格式范文
2014/05/12 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
新员工入职欢迎词
2015/01/23 职场文书
世界气象日活动总结
2015/02/27 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
PostgreSQL通过oracle_fdw访问Oracle数据的实现步骤
2021/05/21 PostgreSQL
详解Laravel框架的依赖注入功能
2021/05/27 PHP
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫