带有包含 % 符号的 LIKE 子句的 psycopg2 insert 语句

psycopg2 insert statement with LIKE clause containing % sign

无法执行 psycopg2 插入查询 (Postgres db),该查询使用最佳实践 %s 符号进行插入并包含包含 % 符号的 LIKE 语句。

% sign in LIKE 语句被解释为插入占位符。

'IndexError: tuple index out of range' 被抛出。

尝试用反斜杠转义 %,没有成功。

with psycopg2.connect(some_url) as conn:
    with conn.cursor() as cur:
        query = """
        SELECT id
        FROM users
        WHERE surname IN %s AND named LIKE '%john'
        """

        cur.execute(query, (tuple(["smith", "mcnamara"]),))
        data = cur.fetchall()

也尝试为 LIKE 表达式使用占位符,然后将带有通配符的文字绑定到它:

query = """
    SELECT id
    FROM users
    WHERE surname IN %s AND named LIKE %s"""

cur.execute(query, (tuple(["smith", "mcnamara"]), "%John",))
data = cur.fetchall()

试试这个:

with psycopg2.connect(some_url) as conn:
    with conn.cursor() as cur:
        query = """
        SELECT id
        FROM users
        WHERE surname IN %s AND named LIKE '%sjohn'
        """

        cur.execute(query, (tuple(["smith", "mcnamara"]), '%'))
        data = cur.fetchall()