psychopg2生成具有可变列数的插入语句

时间:2017-09-22 02:17:51

标签: python sql parameterized

我正在尝试使用带有psychopg2的Python脚本将Excel电子表格插入到Postgres数据库中。

问题不是所有的电子表格都有相同的列数,而且我需要insert语句足够灵活,所以我不必按名称指定它们。

我的方法是将电子表格标题行的列加载到元组中,同样插入值。例如:

sql = ''''INSERT INTO my_table (%s) VALUES (%s);'''
cur.execute(sql, (cols, vals))

其中'cols'和'vals'都是元组。

'cols'可以包含7,9,10等条目,这也取决于电子表格的列数。

当我尝试运行时,我得到:

psycopg2.ProgrammingError: syntax error at or near "'INSERT INTO my_table 
(ARRAY['"
LINE 1: 'INSERT INTO my_table...
    ^

不确定问题是否在我的调用语法中,或者你根本无法做我想做的事。

1 个答案:

答案 0 :(得分:0)

在SQL查询的开头有一个撇号'

''''INSERT INTO my_table (%s) VALUES (%s);'''

应该是

'''INSERT INTO my_table (%s) VALUES (%s);'''

编辑:没有意识到您在哪里尝试动态查询列。为此,您应该使用文本格式。假设cols是一个列表:

sql = '''INSERT INTO my_table ({}) VALUES (%s)'''.format(','.join(cols))

然后,您的执行将是:

cur.execute(sql, (vals,))