当我键入时,我的 SQLite 脚本工作正常:
.read 'dummy.sql'
从 SQLite shell 中。
但是,以下 Python 代码没有正确执行。我在第 5 行收到语法错误。
import sqlite3
db = sqlite3.connect('scheduling.db')
cursor=db.cursor()
a='''.read "scheduling.sql"'''
cursor.execute(a)
db.commit
db.close()
我知道我对引号做错了。我如何使这项工作?
我建议的解决方法是将 .sql 文件的内容读入 Python 字符串变量,就像读取任何其他文本文件一样,然后调用executescript. 与 不同execute,executescript可以在一次调用中执行多条语句。例如,如果您的 .sql 包含以下内容,它将正常工作:
CREATE TABLE contacts (
 contact_id INTEGER PRIMARY KEY,
 first_name TEXT NOT NULL,
 last_name TEXT NOT NULL
);
INSERT INTO contacts (contact_id, first_name, last_name)
VALUES (1, 'John', 'Smith');
这是您需要的完整 Python 代码段:
import sqlite3
with open('scheduling.sql', 'r') as sql_file:
    sql_script = sql_file.read()
db = sqlite3.connect('scheduling.db')
cursor = db.cursor()
cursor.executescript(sql_script)
db.commit()
db.close()
你不能。该程序sqlite3可以看作分为两部分:
.read是一种元命令:解析器打开文件并从中读取行。AFAIK,sqlite3 库中没有任何东西可以模拟该解析器部分,因此您必须手动将这一行解析为 SQL 语句,然后一次执行一个 SQL 语句。