Как мне выполнить скрипт SQLite из Python? - PullRequest
0 голосов
/ 21 января 2019

Мой скрипт SQLite работает нормально, когда я набираю:

.read 'dummy.sql'

из оболочки SQLite.

Однако следующий код 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 голосов
/ 21 января 2019

Попробуй это.Вы можете прочитать запрос из файла, используя функцию 'open' - это заменит функциональность

.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)
0 голосов
/ 21 января 2019

Обходной путь, который я бы порекомендовал, состоит в том, чтобы прочитать содержимое файла .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()
0 голосов
/ 21 января 2019

Вы не можете.Программу sqlite3 можно рассматривать как разделенную на две части:

  • внешне, она разбирает строки ввода в команды SQL
  • , внутренне передает эти команды SQL движку
  • снова внешне, он отображает результат команд SQL.

.read является своего рода командой meta : анализатор открывает файл и читает строкиот него.AFAIK, ничто в библиотеке sqlite3 не может эмулировать эту часть синтаксического анализатора, поэтому вам придется выполнить разбор строки в операторы SQL вручную , а затем выполнить операторы SQL по одному за раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...