如何从 python 中执行 SQLite 脚本?

veg*_*ond 4 python sqlite

当我键入时,我的 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()
Run Code Online (Sandbox Code Playgroud)

我知道我对引号做错了。我如何使这项工作?

the*_*orm 8

我建议的解决方法是将 .sql 文件的内容读入 Python 字符串变量,就像读取任何其他文本文件一样,然后调用executescript. 与 不同executeexecutescript可以在一次调用中执行多条语句。例如,如果您的 .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');
Run Code Online (Sandbox Code Playgroud)

这是您需要的完整 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()
Run Code Online (Sandbox Code Playgroud)


Ser*_*sta 0

你不能。该程序sqlite3可以看作分为两部分:

  • 在外部,它将输入行解析为 SQL 命令
  • 在内部,它将这些 SQL 命令传递给引擎
  • 再次在外部,它显示 SQL 命令的结果。

.read是一种命令:解析器打开文件并从中读取行。AFAIK,sqlite3 库中没有任何东西可以模拟该解析器部分,因此您必须手动将这一行解析为 SQL 语句,然后一次执行一个 SQL 语句。