我需要确定一种关系类型是否是一对一的。你知道吗
在我的用例中,第三方开发人员能够将具有一对一关系的新表(例如Manager和/或Worker)添加回主表(这里称为Person)。它们还可能添加一对多的新表;我需要忽略这些表。你知道吗
以下代码段:
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.automap import automap_base
e = create_engine("sqlite://", echo=True)
e.execute("""
create table person (id integer primary key)
""")
e.execute("""
create table manager (id integer primary key, person_id integer,
FOREIGN KEY(person_id) REFERENCES person(id))
""")
e.execute("""
create table worker (id integer primary key, person_id integer,
FOREIGN KEY(person_id) REFERENCES person(id))
""")
Base = automap_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
class Manager(Base):
__tablename__ = 'manager'
id = Column(Integer, primary_key=True)
person_id = Column(Integer, ForeignKey('person.id'))
person = relationship("Person", uselist=False)
class Worker(Base):
__tablename__ = 'worker'
id = Column(Integer, primary_key=True)
person_id = Column(Integer, ForeignKey('person.id'))
person = relationship("Person", uselist=False)
class WorkerUnion(Base):
__tablename__ = 'worker_union'
id = Column(Integer, primary_key=True)
person_id = Column(Integer, ForeignKey('person.id'))
person = relationship("Person", uselist=True)
Base.prepare(e)
for r in inspect(Person).relationships:
print(f"{r.target.name}, {r.uselist}, {r.collection_class}")
输出:
manager, True, <class 'list'>
worker, True, <class 'list'>
worker_union, True, <class 'list'>
当我为manager/worker关系指定uselist=False时,我发现这很混乱。你知道吗
我显然遗漏了一些东西,有没有一种方法可以通过inspect来确定每个类的关系的性质?你知道吗
我使用以下代码来确定关系类型。我还添加了确定是多对多关系还是多对一关系的方法,因为我通常必须基于该条件执行。以个人为例:
谢谢你的建议和回答。你知道吗
似乎诀窍是在每个关系中查看每个已发现实体的关系。例如:
相关问题 更多 >
编程相关推荐