+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

Python3.x Sqlite使用手册

Python 2.5.x 以上版本内置了 sqlite3 库,因此我们在 Python 中可以直接使用 SQLite。 sqlite3 是 Python 标准库中用于使用 SQLite 数据库的库,提供了轻量级文本数据库的全部功能。sqlite3 库的使用包括引入依赖、连接数据库、创建游标对象、执行 SQL 语句和关闭连接5步,下面我们介绍具体的步骤实现。 1) 引入依赖 具体代码为: ``` import sqlite3 ``` 2) 连接数据库 使用 sqlite3 库,必须先创建一个 Connection 对象,表示与程序连接的数据库: ``` conn = sqlite3.connect('test.db') ``` 3) 创建游标对象 连接数据库之后,需要从连接中获取 Cursor 游标对象: ``` cs = conn.cursor() ``` 4) 执行SQL语句 调用游标对象的 execute() 方法来执行 SQL 语句。创建表时,我们需要判断 SQLite 中是否存在该表,不存在则创建。 示例如下: ``` create_tb_sql=''' create table if not exists info (id int primary key, name text, age int);''' cs.execute(create_tb_sql) ``` 查询时,我们要先通过 execute() 方法执行查询语句,然后获取查询结果,可以调用 Cursor 类的 fetchone() 方法或 fetchall() 方法,获取查询到的第一条或者全部结果: ``` cs.execute('select name from info') result = cs.fetchall() ``` fetchall() 返回结果集中的全部数据,结果是一个元素为元组的列表。每个元组元素是按建表的字段顺序排列。 注意,游标是有状态的,它可以记录当前已经取到结果的第几个记录,因此我们只可以遍历结果集一次。在上面的查询示例中,如果执行 fetchone() 会返回空值,这一点在测试时需要注意。 更改(包括增加、更新和删除)数据时,我们要先调用 execute() 方法更改数据库中的数据,然后调用 Connection 对象的 commit() 方法进行提交,否则操作不会被保存: ``` cs.execute('insert into info values(?,?,?)',(1,'Tom',23)) conn.commit() ``` 另外,我们可以使用 executemany() 方法来执行多次插入,增加多个记录。 5) 关闭连接 当所有操作完成,我们可以调用 Connection 对象的 close() 方法,关闭数据库连接: ``` conn.close() ``` 提示: 游标对象是一个实现了迭代器和生成器的对象,这个时候游标对象中还没有数据,等到执行完 fetchone() 方法或 fetchall() 方法才返回一个元组,并支持 len() 方法和 index() 方法,这是它实现迭代器的原因。 游标对象只能遍历结果集一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,当取完所有的数据,这个游标对象就没有使用价值了。 SQL 注入攻击 通常在执行 SQL 语句时,我们需要使用一些 Python 变量的值拼接该语句。 我们不应该使用 Python 的字符串格式化符,如%s,来拼接查询语句,因为这样可能会导致 SQL 注入攻击。我们应该在SQL语句中,使用?占位符来代替值,然后把对应的值所组成的元组作为 execute() 方法的第二个参数。 示例如下: ``` param = ('123', True) cs.execute('''SELECT comment FROM comment_table WHERE relation_id=? AND merge_mark=?''', param) result_list = cs.fetchall() ```
我的笔记