设想一个名为mydbmod
的简单python模块,它有两个子模块schema1
和schema2
,以这种方式构造为由模式分隔的SQLAlchemy模型:
mydbmod/base.py
mydbmod/schema1.py
mydbmod/schema2.py
现在假设我们有一个场景,在这个场景中,我们希望跨这些模式构建relationships()
,而不合并python文件。有办法吗
在文件mydbmod/schema1.py
中,我们可能有:
from sqlalchemy.base import engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import MetaData
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
metadata = MetaData(schema='schema1', bind=engine)
Base = declarative_base(metadata=metadata)
class People(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
name = Column(String(50), unique=True)
car = relationship('Car', back_populate='owner')
metadata.create_all()
在文件mydbmod/schema1.py
中,我们可能有:
from sqlalchemy.base import engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import MetaData
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
metadata = MetaData(schema='schema2', bind=engine)
Base = declarative_base(metadata=metadata)
class Car(Base):
__tablename__ = 'car'
id = Column(Integer, primary_key=True)
make = Column(String(50))
model = Column(String(50))
owner_id = Column(Integer, ForeignKey('schema1.people.id'))
owner = relationship('People', back_populate='car')
metadata.create_all()
显然,我们不能创建循环导入引用。我现在看到的唯一解决方案是将两个文件合并为一个文件,并显式引用这些类,这是不需要的。还有什么我能做的吗
目前没有回答
相关问题 更多 >
编程相关推荐