以下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
但是当我复制代码打印的命令(在错误消息上方),并将命令粘贴到命令行上时,该命令创建了一个带有表的数据库。
代码有什么问题?
答案 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)
将第二个参数中的'
删除到sqlite
(args
列表的第三个元素)。 subprocess
模块自己进行引用并确保参数作为一个字符串传递给可执行文件。它适用于命令行,因为'
必须告诉shell,它应该将包含的字符串视为单个实体。
args = ["sqlite3", "db.sqlite", "CREATE TABLE my_table(my_column TEXT)"]
应该有用。