【问题标题】:SQLAlchemy and Ambiguous Column nameSQLAlchemy 和不明确的列名
【发布时间】:2011-11-14 11:24:03
【问题描述】:

我在 google 上进行了很好的搜索,但在我的案例中似乎找不到此错误的答案。

我没有进行任何连接,我只是想从这个表中获取所有内容。

所有其他查询都可以正常工作,但这似乎与此错误有关:

InvalidRequestError: Ambiguous column name 'INMPTL_WIW_BATAM_STG.pers_no' in result set! try 'use_labels' option on select statement.

型号:

    batamStg = sa.Table("INMPTL_WIW_BATAM_STG", meta.metadata, 
    sa.Column("PERS_NO", sa.types.String(),primary_key=True),
    sa.Column("FIRST_NAME", sa.types.String()),
    sa.Column("LAST_NAME", sa.types.String()),
    sa.Column("KNOWN_AS", sa.types.String()),
    sa.Column("JOB_TITLE", sa.types.String()),
    sa.Column("MANAGER_NAME", sa.types.String()),
    sa.Column("MANAGER_ID", sa.types.String()),
    sa.Column("MANAGER_COST", sa.types.String()),
    autoload=True,
    autoload_with=engine)

查看:

btm = meta.Session.query(model.BatamStaging).all();

这里只有一个名为 Pers_no 的列,所有主键都是唯一的。

如果我尝试将 LAST_NAME 设置为主键,也会出现同样的错误。

还有其他人遇到过这个问题吗?

【问题讨论】:

  • 我不知道它为什么会这样做,但您是否尝试过它的建议并使用“use_labels”?
  • 使用execute()时,select语句的use_labels不是吗?
  • 我相信您还可以启用详细调试以准确查看 SQLAlchemy 生成的 SQL 语句,这可能会帮助您准确了解收到此错误消息的原因。

标签: python sqlalchemy ambiguous


【解决方案1】:

我的猜想是在覆盖使用autoload=True 反映的列时列名的区分大小写。要验证,请注释掉所有列定义并留下autoload=True。然后反其道而行之。

有关详细信息,请参阅 SA 文档的 Reflecting Database Objects - Overriding Reflected Columns

【讨论】:

  • 这似乎是一种可能的情况,尽管我似乎无法让它们在没有自动加载的情况下正常工作。如果我设法让它工作我会给你一个更新,谢谢
  • 事实证明你是对的。该表与数据库中的所有其他表不同,因为它不遵循命名模式,即使 SQL Developer 将列名显示为大写,它们也必须是小写的。我曾假设 sql 开发人员按实际情况显示它们,并且 sqlalchemy 在映射表时不区分大小写。
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 2018-01-21
  • 2020-11-28
  • 2023-03-08
相关资源
最近更新 更多