SqlAlchemy发出外键问题

时间:2016-09-30 20:29:17

标签: python sqlalchemy

我收到错误

  

无法解析字符串'MACHINE_IE'

中的rfc1738网址

当我尝试导入以下内容时

class MACHINE(declarative_base()):
    __tablename__ = 'MACHINE'
    MACHINE_UID = Column(Integer, primary_key=True)
    MACHINE_IP = Column(String)
    MACHINE_NAME = Column(String)
    MACHINE_INFO = Column(String)

class IE(declarative_base()):
    __tablename__ = 'IE'
    IE_UID = Column(Integer, primary_key=True)
    IE_VERSION = Column(String)
    IE_MAJOR = Column(String)

class MACHINE_IE(declarative_base().metadata):
    __tablename__ = 'MACHINE_IE'
    IE_UID = Column(Integer, ForeignKey("IE.IE_UID"), primary_key=True)
    MACHINE_UID = Column(Integer, ForeignKey("MACHINE.MACHINE_UID"))
    EFFECTIVE_DATE = Column(DateTime)

如果我删除

  

元数据

然后我可以导入模块并对“MACHINE”和“IE”表执行查询并显示行中的数据。但是,当我查询“MACHINE_IE”然后尝试显示查询中的一些数据时,我得到以下内容

  

sqlalchemy.exc.NoReferencedTableError:与“MACHINE_IE.IE_UID”列关联的外键无法找到用于生成目标列“IE_UID”的外键的表“IE”

我猜我需要“元数据”但是当我使用它时,错误似乎是抱怨db连接字符串。但是,如果删除“元数据”,我可以连接到db w / o问题。

这是连接数据

connect_string = "oracle+cx_oracle://{0}:{1}@{2}:{3}/{4}".format(user, pw, server, port, sid)

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您正在使用Base的多个实例。你应该这样做:

Base = declarative_base()

class MACHINE(Base):
    ...

class IE(Base):
    ...

...