python游标FROM%s

时间:2013-11-27 11:17:45

标签: python cursor

我尝试执行此请求:

cur.execute("SELECT MAX(id) FROM %s WHERE equipement_id = %s", (table,eq_id))

但我有错误,因为FROM%s未正确构建。

2 个答案:

答案 0 :(得分:0)

试试这个

cur.execute("""SELECT MAX(id) FROM %s WHERE equipement_id = %s""" % (table, eq_id))

答案 1 :(得分:0)

不幸的是,您需要分两步完成:

table_name = 'stuff'
query = "SELECT MAX(id) FROM {0} WHERE equipement_id = %s".format(table_name)
cur.execute(query, eq_id)

为什么呢? - 数据库连接器往往只允许您将值替换为查询,而不是像表名或表达式那样的任意部分。例如,from psycopg2 docs

  

只应通过此方法绑定变量值:它不应用于设置表或字段名称。对于这些元素,应在运行execute()之前使用普通的字符串格式。

显然:

三重检查table_name的值是否不是用户控制的,并且确实是一个有效的表名!

请阅读psycopg2文档中的the problem with the query parameters部分(即使您最终使用的是另一个数据库;这些评论非常普遍)。