【问题标题】:psychopg2 to generate insert statements with variable column countspsycopg2 生成具有可变列数的插入语句
【发布时间】:2017-09-22 02:17:51
【问题描述】:

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

问题不是所有的电子表格都有相同的列数,我需要插入语句足够灵活,这样我就不必按名称指定它们。

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

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...
    ^

不确定问题出在我的调用语法中,还是您根本无法做我想做的事情。

【问题讨论】:

    标签: python sql parameterized


    【解决方案1】:

    在您的 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,))
    

    【讨论】:

    • 好眼...对不起愚蠢的错字。我删除了它,但错误仍然与描述的完全相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多