SQLAlchemy 和模糊列名

4 投票
1 回答
3656 浏览
提问于 2025-04-17 06:17

我在谷歌上搜索了很久,但似乎找不到解决我这个错误的方法。

我没有做任何连接操作,我只是想从这个表里获取所有数据。

其他的查询都运行得很好,但这个查询却出现了错误:

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 设置为主键,错误也会出现。

有没有人遇到过这个问题?

1 个回答

4

我猜测可能是列名的大小写敏感问题,这在使用 autoload=True 时覆盖列的时候会出现。为了验证这一点,可以把所有的列定义注释掉,只保留 autoload=True。然后再反过来做一次。

想了解更多信息,可以查看SA文档中的 反射数据库对象 - 覆盖反射列

撰写回答