簡體   English   中英

如何從python中執行SQLite腳本?

[英]How do I execute an SQLite script from within python?

當我鍵入以下內容時,我的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()

我知道引號做錯了。 我該如何工作?

你不能。 程序sqlite3可以分為兩部分:

  • 在外部,它將輸入行解析為SQL命令
  • 在內部,它將那些SQL命令傳遞給引擎
  • 再次在外部顯示SQL命令的結果。

.read是一種meta命令:解析器打開文件並從中讀取行。 AFAIK,sqlite3庫中沒有任何東西可以模擬該解析器部分,因此您必須手動將行解析為SQL語句,然后一次執行一個SQL語句。

嘗試這個。 您可以使用“打開”功能從文件中讀取查詢-這將替換

。讀

功能; 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)

我建議的解決方法是像讀取其他任何文本文件一樣,將.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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM