- 概述
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身就是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在IOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。
- 工作原理
不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
- 在Python中的运用
Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。由于SQLite数据库内置在Python标库中,因此可以直接来操作SQLite数据库。
在Python中操作数据库时,首选要导入数据库的驱动,然后通过Connection对象和Cursor对象操作数据库。在数据库操作完毕之后,要确保打开的Connection对象和Cursor都正确地被关闭,否则,资源就会泄露。
-
- 示例
- # 导入SQLite驱动
- import sqlite3
- import os
- # 连接到SQLite数据库
- # 数据库文件是1hrtest.db
- # 如果文件不存在,那么会自动在当前目录创建一个数据库文件;
- conn = sqlite3.connect('1hrtest.db')
- # db_file = os.path.join(os.path.dirname(__file__), '1hrtest.db')
- # if os.path.isfile(db_file):
- # os.remove(db_file)
- # conn = sqlite3.connect(db_file)
- # 创建一个Cursor
- cursor = conn.cursor()
- # 执行一条SQL语句,创建user表:
- cursor.execute('create table user(id varchar(20) primary key, name varchar(20))')
- # 继续执行一条SQL语句,插入一条记录:
- cursor.execute('insert into user(id, name) values(\'1\',\'zhaoxinlong\')')
- # 通过rowcount获得插入的行数
- print(cursor.rowcount)
- # 执行查询语句:
- cursor.execute('select * from user where id = ?', ('1',))
- # 获得查询结果集
- values = cursor.fetchall()
- print(values)
- # 关闭Cursor
- cursor.close()
- # 提交事务
- conn.commit()
- # 关闭Connection
- conn.close()
运行结果:
图 1
在程序运行完毕后,会在程序的当前目录下生成一个1hrtest.db文件,如图所示:
图 2
使用Python的DB API时,只要搞清楚Connection和Cursor对象,打开后一定记得关闭,就可以放心地使用。在使用Cursor对象执行Insert,Update,Delete语句时,执行结果由rowcount返回影响行数,就可以拿到执行结果。在使用Cursor对象执行Select语句时,通过fetchall()可以拿到结果集。结果集是一个list,每一个元素都是tuple,对应一行记录。如果SQL语句带有参数,那么需要把参数按照位置传递给execute()方法,有几个?占位符就必须应对几个参数,例如:
- cursor.execute('select * from user where name=?and pwd=?', ('abc', 'password'))