[PYTHON] Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird

Was ist der Unterschied zwischen back_populate und backref in SQL Alchemy? Was passiert, wenn ich keinen von beiden schreibe? Die Geschichte.

Um aus der Schlussfolgerung zu schreiben,

(1) Wenn Backref verwendet wird Es wird automatisch eine wechselseitige Beziehung erstellt.

(2) Wenn back_populate verwendet wird Sie müssen selbst eine wechselseitige Beziehung herstellen.

(3) Wenn weder back_populated noch backref verwendet wird Umgekehrte Felder werden während einer Transaktion nicht automatisch aktualisiert.

Es stellt sich heraus, dass.

Schauen wir uns ein konkretes Beispiel an. Betrachten Sie das Ereignismodell und das Ticketmodell als Beispiele. Ein Event hat mehrere Tickets, eine Eins-zu-Viele-Beziehung.

Bei Verwendung von backref

class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket",backref="event")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #Event Object

Bei Verwendung von back_populated

Wenn Sie back_populate verwenden, funktioniert dies nur, wenn Sie eine bidirektionale Beziehung haben.

class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket",back_populates="event")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
	event = relationship("Event",back_populates="tickets")
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #Event Object

Wenn keiner verwendet wird

class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
	event = relationship("Event")
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #None

In diesem Fall ist Ticket → Ereignis Keine. Mit anderen Worten ist ersichtlich, dass das Ereignis nicht mit dem Ticket in der Transaktion verknüpft ist. Nach dem Ende der Transaktion (nach dem Einfügen des Ereignisobjekts) werden sie natürlich in beide Richtungen verknüpft.

event = self.session.query(Event).filter(Event.id==1).one()
ticket = self.session.query(Ticket).filter(Ticket.id==1).one()

event.tickets #Ticket Objects
ticket.event #Event Object

Recommended Posts

Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Unterschied zwischen == und ist in Python
Unterschied zwischen SQLAlchemy flush () und commit ()
Was ist der Unterschied zwischen "pip" und "conda"?
Über den Unterschied zwischen "==" und "is" in Python
Was ist der Unterschied zwischen Unix und Linux?
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Was ist der Unterschied zwischen symbolischen und harten Links?
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
[Python] Unterschied zwischen Funktion und Methode
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschiede in der Beziehung zwischen PHP und Python schließlich und beenden
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
[Python] Unterschied zwischen Klassenmethode und statischer Methode
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschied zwischen numpy.ndarray und list (Dimension, Größe)
Unterschied zwischen ls -l und cat Befehl
Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1