Ошибка при создании базы данных SQLite с использованием модуля подпроцесса Python - PullRequest
1 голос
/ 10 февраля 2011

Следующий код Python пытается создать базу данных SQLite и таблицу с использованием командной строки в Linux:

#!/usr/bin/python2.6
import subprocess

args = ["sqlite3", "db.sqlite", "'CREATE TABLE my_table(my_column TEXT)'"]
print(" ".join(args))

subprocess.call(args)

Когда я запустил код, он создал базу данных с нулевыми байтами и следующим выводом:

sqlite3 db.sqlite 'CREATE TABLE my_table(my_column TEXT)'
Error: near "'CREATE TABLE my_table(my_column TEXT)'": syntax error

Но когда я скопировал команду, напечатанную кодом (чуть выше сообщения об ошибке), и вставил команду в командную строку, команда создала базу данных с таблицей.

Что не так с кодом?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Помимо дополнительных кавычек, о которых упоминает @Dirk, вы также можете создать базу данных, не вызывая подпроцесс:

import sqlite3

cnx = sqlite3.connect("e:/temp/db.sqlite")
cnx.execute("CREATE TABLE my_table(my_column TEXT)")
cnx.commit()
cnx.close()
2 голосов
/ 10 февраля 2011

Перетащите ' во втором аргументе в sqlite (третий элемент списка args).Модуль subprocess выполняет кавычки самостоятельно и гарантирует, что аргументы передаются в исполняемый файл в виде одной строки.Он работает в командной строке, потому что там ' необходимы, чтобы сообщить оболочке, что она должна обрабатывать вложенную строку как одну сущность.

args = ["sqlite3", "db.sqlite", "CREATE TABLE my_table(my_column TEXT)"]

должно работать.

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