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

时间:2011-02-10 17:52:20

标签: 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 'CREATE TABLE my_table(my_column TEXT)'
Error: near "'CREATE TABLE my_table(my_column TEXT)'": syntax error

但是当我复制代码打印的命令(在错误消息上方),并将命令粘贴到命令行上时,该命令创建了一个带有表的数据库。

代码有什么问题?

2 个答案:

答案 0 :(得分:3)

除了@Dirk之前提到的额外引用之外,您还可以创建数据库而不会产生子进程:

import sqlite3

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

答案 1 :(得分:2)

将第二个参数中的'删除到sqliteargs列表的第三个元素)。 subprocess模块自己进行引用并确保参数作为一个字符串传递给可执行文件。它适用于命令行,因为'必须告诉shell,它应该将包含的字符串视为单个实体。

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

应该有用。