在python中创建sqlite3表的安全方法

时间:2010-11-29 21:08:47

标签: python sqlite

要插入表格,安全的方法是

c.execute("insert into table (?,?,?,...)",my_tuple)

但是如何安全地创建一个表?我尝试过这样的事情:

conn = sqlite3.connect(database)
c = conn.cursor()
cmd = "create table ? (? text,? text)"
my_tuple = ("my_table","first","second")
c.execute(cmd,my_tuple)

但我得到这样的错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "?": syntax error

我应该只在python中组装一个字符串并将其抛出到sqlite来创建表吗?

2 个答案:

答案 0 :(得分:2)

如果您只是尝试导入csv文件,并假设它们不是由some user who might try to mess with your database发送给您的,那么只需将其放在Python中即可:

"create table %s (%s text,%s text)" % ("my_table","first","second")

如果电子表格有可能来自恶意用户,那么您可以担心清理列/文件名。

答案 1 :(得分:2)

similar question的答案可能有助于https://stackoverflow.com/a/3247553/1709198

在那里,回答者认为不可能用问号方法命名表格,而是提出了一种方法来“清理”输入,方法是定义一个“擦除”输入的函数,这样可以删除)(][;,之类的内容。有人不能试图抛出像); drop tables --这样的sql代码搞砸了。

我也不知道有什么方法可以让问号方法与表名一起工作,我认为这个'清理字符串'的方法和它一样好。