psycopg2用placehold从元组设置主键

2024-04-28 11:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在psycopg2中从一个元组中循环的值的元组中设置主键?在

例如,我有我的元组

meetattrs = ('id', 'venue', 'date', 'rail', 'weather', 'trackcondition')

然后我要创建表并提取和插入值。在meetattrs中,我希望将id设置为主键。在

^{pr2}$

但是,这会导致此错误,不确定如何解决。在

Traceback (most recent call last):
  File "racemeeting.py", line 56, in <module>
    + ")")
psycopg2.ProgrammingError: column "id" specified more than once

Tags: idmostdate错误psycopg2元组weathertraceback
2条回答

在这种情况下,您应该首先尝试构建和控制sql字符串。在

("create table meetings (id integer PRIMARY KEY, " +
            ", ".join("%s varchar" % fld for fld in meetattrs)
            + ")")

给出:

^{pr2}$

有效地复制id列。在

解决方案很简单:从meetattrs中删除第一个标识符:

cur.execute("create table meetings (id integer PRIMARY KEY, " +
            ", ".join("%s varchar" % fld for fld in meetattrs[1:])
            + ")")

或者,如果无法确定第一个元素的主键:

cur.execute("create table meetings (id integer PRIMARY KEY, " +
            ", ".join("%s varchar" % fld for fld in meetattrs if fld != 'id')
            + ")")

执行join之后的当前sql查询,占位符的值为:

'create table meetings (id integer PRIMARY KEY, id varchar, venue varchar, date varchar, rail varchar, weather varchar, trackcondition varchar)'

id被指定两次。在

您可以以更简洁的方式构建查询:

^{pr2}$

SQL语句变成:

"create table meetings (" + query_params % meetattrs + ")"

插入占位符值后:

'create table meetings (id integer PRIMARY KEY, venue varchar, date varchar, rail varchar, weather varchar, trackcondition varchar)'

确保元组的第一项始终为id

相关问题 更多 >