psycopg2传入表名

时间:2015-08-31 16:09:29

标签: python psycopg2

我有以下查询

table = "#temp_table"
cursor.execute("""select * from %s as a """, (table))

我一直在来自stement的语法错误。为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

您收到此错误是因为传递给第二个参数(table)(实际应该是(table,))的参数在运行的SQL语句中被转义。

在此示例中,select * from %s as a转换为select * from '#temp_table' as a,这是一个错误。要正确插入表名,您需要直接格式化SQL语句字符串,如下所示:

query = 'select * from "{}" as a'.format(table)
cursor.execute(query)

您应该非常小心以这种方式插入查询的数据,因为它非常容易受到SQL注入攻击。不要将此与不受信任的数据一起使用。