如何从python中执行SQLite脚本?

时间:2019-01-21 12:01:13

标签: 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()

我知道引号做错了。我该如何进行这项工作?

3 个答案:

答案 0 :(得分:0)

您不能。程序sqlite3可以分为两部分:

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

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

答案 1 :(得分:0)

尝试一下。您可以使用“打开”功能从文件中读取查询-这将替换

  

.read

功能; SQL脚本是带有查询的文本文件。然后运行read_sql_query。

import sqlite3
import pandas as pd
sqlite_file = 'scheduling.db'
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
f = open('scheduling.sql','r')
sql = f.read() 
print pd.read_sql_query(sql, conn)

答案 2 :(得分:0)

我建议的解决方法是像读取任何其他文本文件一样,将.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()