【问题标题】:psycopg2.errors.AmbiguousColumn: column reference "words" is ambiguouspsycopg2.errors.AmbiguousColumn:列引用“单词”不明确
【发布时间】:2021-09-10 07:08:58
【问题描述】:

我正在尝试将 PostgreSQL 与 Python (v3.9.4) 接口。

这是我的代码的 sn-p:

content = 'this is a message'
user = 'Random User'
num_words = len(content.split())
cursor.execute('''
        INSERT INTO Rankings (UserName, Words)
            VALUES (%s, %s)
        ON CONFLICT (UserName)
        DO UPDATE
            SET Words = Words + %s
        ''', (user, num_words, num_words))

我已经正确地创建了一个 PostgreSQL 连接和游标对象。并且还创建了一个包含 2 列的表格 - 用户名和单词。

但是,我一直遇到同样的错误:

psycopg2.errors.AmbiguousColumn: column reference "words" is ambiguous
LINE 6:             SET Words = Words + 1
^

当我将 SET Words = Words + %s 更改为 SET Words = %s 时,一切正常。如何增加 Words 的现有值而不导致此错误?

【问题讨论】:

  • 仅供参考,截至 2021 年 2 月,Postgres 9.5 已停产。表列名称实际上是混合大小写还是小写?
  • 它们是大小写混合的。

标签: python python-3.x postgresql error-handling postgresql-9.5


【解决方案1】:

看起来这个错误的答案是始终明确命名您所指的表的列,即使只有一个表。

我把它改写为SET Words = Rankings.Words + %s

【讨论】:

    【解决方案2】:

    根据文档ON CONFLICT

    ON CONFLICT DO UPDATE 中的 SET 和 WHERE 子句可以使用表的名称(或别名)访问现有行,并使用特殊的排除表访问建议插入的行。

    因此,您必须使用表名或特殊表EXCLUDED 来限定列。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2023-01-18
      • 2015-01-07
      • 2012-04-06
      • 2018-07-02
      • 1970-01-01
      • 2017-01-08
      • 2018-01-26
      相关资源
      最近更新 更多