2013-05-31 80 views
2

我有一個SqlAlchemy的問題。當我在Oracle數據庫中定義模式時,其他表中無法識別外鍵。測試沒有使用佈局,它的工作。但是我需要定義這個應用程序的模式,因爲用戶不是表的所有者。 我想你的幫助來解決這個問題。 代碼:使用SQLAlchemy的Oracle數據庫模式

Base = declarative_base() 
SCHEMA = {'schema' : 'SIATDESV'} 

class Pgdasd(Base): 
    __tablename__ = 'PGDASD' 
    __table_args__ = SCHEMA 

    PGDASD_00000_ID_DECLARACAO = Column(String(17), primary_key = True) 

class Pgdasd_01000(Base): 
    __tablename__ = 'pgdasd_01000' 
    __table_args__ = SCHEMA 

    PGDASD_00000_ID_DECLARACAO = Column(String, ForeignKey('PGDASD.PGDASD_00000_ID_DECLARACAO')) 
    PGDASD_01000_NRPAGTO  = Column(String, primary_key = True) 

錯誤: 與列「pgdasd_01000.PGDASD_00000_ID_DECLARACAO」找不到表「PGDASD」,用以產生一個外鍵的目標列「PGDASD_00000_ID_DECLARACAO」 *相關*外鍵

謝謝!

+0

請問您可以從日誌中添加以下信息 - 創建由SQLAlchemy生成的表查詢? – vvladymyrov

回答

0

第1步:檢查表是否在db中創建。順便說一句你是如何創建這些表?你運行metadata.create_all()方法嗎?

第2步: 嘗試的模式的添加姓名到ForeignKey的確定指標:

Base = declarative_base() 
SCHEMA = {'schema' : 'SIATDESV'} 

class Pgdasd(Base): 
    __tablename__ = 'PGDASD' 
    __table_args__ = SCHEMA 

    PGDASD_00000_ID_DECLARACAO = Column(String(17), primary_key = True) 

class Pgdasd_01000(Base): 
    __tablename__ = 'pgdasd_01000' 
    __table_args__ = SCHEMA 

    PGDASD_00000_ID_DECLARACAO = Column(String, ForeignKey('SIATDESV.PGDASD.PGDASD_00000_ID_DECLARACAO')) 
    PGDASD_01000_NRPAGTO  = Column(String, primary_key = True) 

如果這將有助於您還可以使代碼使用的模式值,以避免硬編碼的模式。

PGDASD_00000_ID_DECLARACAO = Column(String, ForeignKey(SCHEMA['schema']+'.PGDASD.PGDASD_00000_ID_DECLARACAO')) 

PS:無論如何,檢查SQLAlchemy日誌會產生什麼SQL查詢總是很有用。

+0

問題仍然存在...... 當我在方案中插入外鍵時會生成相同的錯誤。 – fredsilva

+0

請確保在模式「SIATDESV」中有'PGDASD'表,並且它有這樣的列。 – vvladymyrov

+0

在sqlplus中運行以下查詢:'從SIATDESV.PGDASD選擇PGDASD_00000_ID_DECLARACAO;'檢查db中是否存在這樣的表。如果沒有這樣的表或列,DB會投訴。 – vvladymyrov

相關問題