1

我正在尝试使用参数化查询psycopg来删除一堆行。我的脚本有如下删除语句:

cur.executemany( "WITH remove_rows as (DELETE FROM users WHERE userid = %s RETURNING *), insert_rows as (INSERT INTO old.users SELECT * FROM remove_rows RETURNING *) SELECT count(*) from insert_rows;", (id,))

我得到的错误是:

Traceback (most recent call last):
  File "removal.py", line 17, in <module>
    cur.executemany( "WITH remove_rows as (DELETE FROM .users WHERE userid = %s RETURNING *), insert_rows as (INSERT INTO old.users SELECT * FROM remove_rows RETURNING *) SELECT count(*) from insert_rows;", (id,))
psycopg2.ProgrammingError: syntax error at or near "%"
LINE 1: ...ws as (DELETE FROM users WHERE userid = %s RETURNI...

当我从中删除空间userid = %s并制作它时userid=%s,我得到了与 message 相同的错误column "s" does not exist

我开始怀疑psycopg2参数化是否不能处理 CTE?

4

1 回答 1

1

executemany()接受一组嵌套的参数序列,而不是一个。

要么将您的参数包装到另一个列表中,要么cur.execute()只运行一次查询。

于 2014-12-23T16:04:46.473 回答