Python 参数数目可变的Psycopg2查询抛出语法错误

Python 参数数目可变的Psycopg2查询抛出语法错误,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我编写了一个Python函数来获取可变长度列表的列表,并将其插入到一个表中,该表的列数与每个列表中的值相同: ps.cur = psycopg_cursor def load_lists(list_of_lists, table): # Get number of columns in table sql = """ SELECT column_name FROM information_schema.columns WHERE tabl

我编写了一个Python函数来获取可变长度列表的列表,并将其插入到一个表中,该表的列数与每个列表中的值相同:

ps.cur = psycopg_cursor

def load_lists(list_of_lists, table):
    # Get number of columns in table
    sql = """
          SELECT column_name FROM information_schema.columns
          WHERE table_schema = 'public'
          AND table_name = '{}'
          """.format(table)
    ps.cur.execute(sql)
    columns_list = [i[0] for i in ps.cur.fetchall()]
    # Insert list of lists into table
    columns = '(' + ','.join(columns_list) + ')'
    parameters = '(' + ','.join(['%%s' for i in columns_list]) + ')'
    for i in list_of_lists:
        sql = """
              INSERT INTO {} {}
              VALUES {}
              """.format(table, columns, parameters)
        values = tuple([j for j in i])
        ps.cur.execute(sql, values)
我得到以下回溯,尝试执行该函数:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "psyco.py", line 24, in load_lists
    ps.cur.execute(sql, values)
psycopg2.ProgrammingError: syntax error at or near "%"
LINE 3:               VALUES (%s,%s,%s,%s,%s)
                              ^

Psycopg2似乎无法将我的变量绑定到%s参数,但我不知道为什么。非常感谢任何帮助或想法

结果表明,在为查询构建参数标记时,每个“的”前面只需要一个%。这有点令人困惑,因为Python中的旧字符串格式化方法也使用%符号,但与Psycopg2不同。请参见下面的工作代码,只有“parameters”变量中有更改:

ps.cur=psycopg\u光标

def load_lists(list_of_lists, table):
    # Get number of columns in table
    sql = """
          SELECT column_name FROM information_schema.columns
          WHERE table_schema = 'public'
          AND table_name = '{}'
          """.format(table)
    ps.cur.execute(sql)
    columns_list = [i[0] for i in ps.cur.fetchall()]
    # Insert list of lists into table
    columns = '(' + ','.join(columns_list) + ')'
    parameters = '(' + ','.join(['%s' for i in columns_list]) + ')' # <--- THIS LINE
    for i in list_of_lists:
        sql = """
              INSERT INTO {} {}
              VALUES {}
              """.format(table, columns, parameters)
        values = tuple([j for j in i])
        ps.cur.execute(sql, values)