表名的占位符

时间:2013-12-02 08:25:50

标签: python database sqlite

我正在制作可编辑的表格。并想询问有关表名的占位符。我尝试了很多方法,但它不起作用。这样做安全吗?以及如何做到这一点?

我看过很多人都在讨论这个问题但似乎很复杂。任何人都可以给我一个简单的答案吗?

id = request.args.get('id')
column = request.args.get('column')
newValue = request.args.get('newValue')

g.db = connect_db()
cur = g.db.execute('UPDATE customer SET %=? WHERE rowid=?', %(column), newValue, id))
g.db.commit()
g.db.close()

1 个答案:

答案 0 :(得分:1)

安全性取决于您要使用的列名和表名的来源。如果从不受信任的来源获取它们,可能会有不安全因素。在任何一种情况下,变量表/列名称对于不存在的表/列的潜在运行时错误都是不安全的。

对于您的代码,不要对表名或列名使用占位符。原因是虽然具有不同绑定变量的SQL在涉及的表方面是相同的,但执行计划等。 (即等效编译),具有不同表名或列的SQL显然不相等。

你可以这样做:

sql_template = 'UPDATE {table} SET {column}=? WHERE rowid=?'
sql = sql_template.format(table=table_name, column=column_name)
db.execute(sql, (newValue, id))
相关问题