在现有表中定义外键

时间:2014-09-16 07:44:57

标签: python sqlalchemy

如何在下面的示例中的表之间定义外键?它们具有相同名称的列,但我目前无法进行连接。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Table, Column, Integer, String

engine = create_engine('my connection details', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()

my_table = Table('my_table', 
    Base.metadata, 
    autoload=True, 
    autoload_with=engine, 
    schema='my_schema')

other_table = Table('other_table', 
    Base.metadata, 
    autoload=True, 
    autoload_with=engine, 
    schema='other_schema')

class MyClass(Base):
    __table__ = my_table

class OtherClass(Base):
    __table__ = other_table

1 个答案:

答案 0 :(得分:1)

我相信ForeignKey应该由sqlalchemy自动反映出来。也许你有两个不同的schema s这就是为什么它在你的情况下不起作用的原因。

无论如何,根据Overriding Reflected Columns,你应该可以做类似的事情:

my_table = Table('my_table', Base.metadata, 
    Column("my_id", Integer, ForeignKey("[other_schema].other_table.my_id")),
    autoload=True, autoload_with=engine, schema='my_schema')