Angenommen, ich habe folgende SQLAlchemy Klassen definiert:Wie kann ich den Typ einer dynamischen SQLAlchemy-Beziehung bestimmen (z. B. mehrere zu eins)?
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
id = Column(Integer, primary_key=True)
computers = relationship('Computer', backref=backref('owner', lazy='dynamic'))
class Computer(Base):
__tablename__ = 'computer'
id = Column(Integer, primary_key=True)
ownerid = Column(Integer, ForeignKey('person.id'))
weiter Angenommen, dass ich die faule Abfrageobjekt auf diese Weise aufgerufen haben:
relation = getattr(Computer, 'owner')
Wie kann ich feststellen, ob relation
auf eine einzelne Instanz bezieht sich der Person
(also in einer Viele-zu-Eins-Beziehung, wie in diesem Beispiel), oder wenn sich relation
auf eine Sammlung von Instanzen bezieht (wie in einer Eins-zu-viele-Beziehung)? Mit anderen Worten: Wie kann ich den Beziehungstyp eines dynamischen SQLAlchemy-Beziehungsobjekts ermitteln?
Ich bin nicht sicher, ob ich die Frage richtig verstehe, aber in Ihrem Beispiel, warum überprüfen Sie nicht einfach, ob es eine Sammlung (z. B. eine Liste) oder ein einzelnes Element ist? Dies ist völlig unabhängig von SQLAlchemy und würde die ORM-Funktion von SQLAlchemy nutzen und vollständig von der Datenbank abstrahieren. – javex
Sie haben meistens Recht: Ich denke, die richtige Lösung ist es, zu überprüfen, ob 'isinstance (relation, list)' --- falls wahr, dann können wir es einfach wie eine Liste verwenden, aber wenn falsch, muss man 'relation.one') ', um die Beziehung zu einer konkreten Instanz abzubilden. Wenn du unten eine Antwort hinzufügst, kann ich dich belohnen (bitte nimm die Einschränkung, die ich hier angegeben habe, wenn du kannst). – argentpepper