接上文Python开发从零开始-49.21-数据库操作,本文小编与大家分享 Python 数据库操作的相关知识。
四、Python 操作 SQLite
Python 操作 SQLite 数据库主要通过 sqlite3 模块实现,该模块是 Python 标准库的组成,无需额外安装。
(一)Python 操作 SQLite 的基本步骤
1、导入 sqlite3 模块
import sqlite32、连接 SQLite 数据库
使用 sqlite3.connect() 函数 可以连接 SQLite 数据库。该函数接受一个数据库文件名的字符串参数,如果该数据库不存在,函数将创建一个新的数据库文件,函数返回 sqlite3.Connection 对象。
打开前文 test.db 数据库的代码示例如下:
conn = sqlite3.connect(r'C:\Users\Adminstrator\test.db')注意:如果没有指定数据库文件路径,那么新创建的数据库文件将与当前 Python 文件同一目录。
3、创建游标对象
连接到数据库后,需要通过连接对象(sqlite3.Connection)创建游标对象(sqlite3.Cursor),它是用于执行 SQL 语句并与数据库交互的对象。可以通过连接对象的 cursor() 方法 创建游标对象。
cursor = conn.cursor()4、执行 SQL 语句
sqlite3.Cursor 对象提供了多个方法来执行 SQL 语句。
execute() 方法:用于执行单条 SQL 语句,可以使用占位符传递值;
executescript() 方法:用于执行多行 SQL 语句,方法接受一个包含一个或多个 SQL 语句的字符串,它将自动将字符串根据语句分隔符(分号 ;)拆分成单独的 SQL 语句,并逐一执行它们;
executemany() 方法:用于重复执行多行 DML(数据操作语言,主要用于对数据库中的数据进行增删改查操作)的 SQL 语句。
(1)execute() 方法
sqlite3.Cursor 对象的 execute() 方法用于执行单条 SQL 语句。例如,创建一个表并对其进行增删改查等操作。execute() 方法的原型为:
Cursor.execute(sql_str, [values])
|
1)创建表
在 test.db 数据库中创建 DEPARTMENT 表的代码示例如下:
create_sql_str = """CREATE TABLE IF NOT EXISTS DEPARTMENT (ID INT PRIMARY KEY,DEPT CHAR (50) NOT NULL,EMP_ID INT NOT NULL);"""cursor.execute(create_sql_str)
2)插入单行数据
在 DEPARTMENT 表中插入单行数据的代码示例如下:
insert_sql_str = """INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)VALUES (1, 'IT Billing', 1 );"""cursor.execute(insert_sql_str)
注意:应用程序未对用户输入进行合法性判断或过滤,直接将输入数据拼接到 SQL 语句中传递给数据库执行,极易遭受 SQL 注入攻击。所以实际项目中,通常会要求对 SQL 语句的参数进行检测,过滤非法字符和攻击脚本。系统编码开发时,使用预编译语句分离用户输入与 SQL 指令,是最有效的防御方法。
再次插入数据时,代码可以修改为:
insert_sql_str = """INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)VALUES (?, ?, ? );"""cursor.execute(insert_sql_str, (2, 'Engineering', 2))
(2)executescript() 方法
executescript() 方法用于执行多行 SQL 语句。它在读取数据库脚本文件(.sql 文件),快速创建数据库结构和插入数据场景非常有用。
executescript() 方法原型为:
Cursor.executescript(sql_script)
|
需要注意的是,executescript() 方法如果在执行时有一个未决事务 (在数据库会话中有一个事务已经开始,但是没有被正确提交或回滚) ,那么首先会隐式地执行一个 COMMIT 语句,除此之外,它不会执行任何隐式的事务控制。因此,任何关于事务控制的内容都应添加到 sql_script 中。
创建 example.db 数据库文件,读取并批量执行前文 testDB.sql 文件中的 SQL 语句的完整代码示例如下:
import sqlite3with open(r'C:\Users\Adminstrator\testDB.sql', 'r', encoding='utf-8') as f:sql_script = f.read()conn = sqlite3.connect(r'C:\Users\Adminstrator\example.db')cursor = conn.cursor()cursor.executescript(sql_script)cursor.close() # 关闭游标conn.close() # 关闭连接
受文章篇幅所限,下文将继续介绍 Python 数据库操作的相关知识。