使用Python子流程模块创建SQLite数据库时出错

使用Python子流程模块创建SQLite数据库时出错,python,sqlite,Python,Sqlite,以下Python代码尝试在Linux中使用命令行创建SQLite数据库和表: #!/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 'C

以下Python代码尝试在Linux中使用命令行创建SQLite数据库和表:

#!/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
但是,当我复制由代码打印的命令(就在错误消息的上方)并将该命令粘贴到命令行时,该命令创建了一个带有表的数据库


代码有什么问题?

将第二个参数中的
放到
sqlite
args
列表的第三个元素)。
子流程
模块自己进行引用,并确保参数作为一个字符串传递给可执行文件。它在命令行上工作,因为在命令行中,
是告诉shell它应该将封闭字符串视为单个实体所必需的

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

应该可以工作。

将第二个参数中的
放到
sqlite
args
列表的第三个元素)。
子流程
模块自己进行引用,并确保参数作为一个字符串传递给可执行文件。它在命令行上工作,因为在命令行中,
是告诉shell它应该将封闭字符串视为单个实体所必需的

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

应该有效。

除了@Dirk之前提到的额外引用之外,您还可以创建数据库,而无需生成子流程:

import sqlite3

cnx = sqlite3.connect("e:/temp/db.sqlite")
cnx.execute("CREATE TABLE my_table(my_column TEXT)")
cnx.commit()
cnx.close()

除了@Dirk之前提到的额外引用之外,您还可以创建数据库,而无需生成子流程:

import sqlite3

cnx = sqlite3.connect("e:/temp/db.sqlite")
cnx.execute("CREATE TABLE my_table(my_column TEXT)")
cnx.commit()
cnx.close()

我们还应该说:Python有一个处理sqlite的内置模块:这可能比调用单独的进程要干净得多。我们还应该说:Python有一个处理sqlite的内置模块:这可能比调用单独的进程要干净得多。如果尝试连接到不存在的数据库。如果尝试连接到不存在的数据库,可能需要注意SQLite会创建一个数据库。