2011-11-14 60 views
4

我在谷歌上有一個很好的搜索,但我似乎無法找到這個錯誤在我的情況下的答案。SQLAlchemy和模棱兩可的列名

我沒有做任何連接,我從字面上試圖從這個表中獲得所有。

所有其他查詢做工精細,但這似乎與此錯誤被搞亂了:

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設置爲主鍵,也會發生同樣的錯誤。

有沒有其他人有這個問題?覆蓋其通過使用autoload=True反射列時

+0

我不知道爲什麼它這樣做,但你有沒有嘗試過它建議和使用「use_labels」? – Matt

+0

當你使用execute()時,是不是select語句的use_labels? – JackalopeZero

+0

我相信你也可以啓用詳細的調試來查看SQLAlchemy正在生成哪些SQL語句,這可能會幫助你弄清楚爲什麼你會得到這個錯誤信息。 – larsks

回答

4

我的猜想是列名的大小寫。要驗證,請註釋掉所有列定義並保留autoload=True。然後做相反的事情。

有關更多信息,請參閱SA文檔的Reflecting Database Objects - Overriding Reflected Columns

+0

這似乎是一個可能的情況下,雖然我似乎無法自動加載他們正常工作。如果我設法讓它工作我會給你一個更新,謝謝 – JackalopeZero

+0

原來你是對的。這張表與數據庫中的所有其他表不同,因爲它並不拘泥於命名模式,即使SQL Developer將列名顯示爲大寫,它們也必須小寫。我曾經假定sql開發人員將它們顯示爲實際情況,並且在映射表時sqlalchemy不區分大小寫。 – JackalopeZero

相關問題