使用Python子流程模块创建SQLite数据库时出错
以下Python代码尝试在Linux中使用命令行创建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
#!/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会创建一个数据库。