[PYTHON] So erhalten Sie die Eltern-ID mit sqlalchemy

Ich möchte die parent_id automatisch nummerieren

Dies ist erforderlich, wenn Sie Informationen zur Eltern-Kind-Beziehung von Daten in die Datenbank eingeben möchten. Beispielsweise kann ein Hotel mit mehreren Zimmern verbunden sein, oder mit einem Service können mehrere Pläne verbunden sein.

Die wichtigen Punkte sind die folgenden zwei Punkte.

  1. Vor dem Speichern der untergeordneten Daten muss die ID der übergeordneten Daten abgerufen werden.
  2. Wenn beim Speichern untergeordneter Daten ein Fehler auftritt, muss vor dem Speichern der übergeordneten Daten ein Rollback durchgeführt werden.

Verwenden Sie session.flush () für sqlalchemy

session.add(parent_record) #Registrieren einer Transaktion
session.fluhs() #In der DB registriert (nicht gespeichert)
parent_id = parent_record.id #Übergeordnete ID abrufen

Zum Zeitpunkt von session.add (Datensatz) wurde die ID der übergeordneten Daten nicht zugewiesen, sodass sie nicht abgerufen werden können. Wenn Sie session.flush () ausführen, wird die übergeordnete ID angegeben und Sie können sie abrufen.

Warum nicht session.commit () verwenden?

session.add(parent_record)
session.commit() #Registriert in DB (gespeichert)
parent_id = parent_record.id #Übergeordnete ID abrufen

Es kann mit session.commit () in der Datenbank gespeichert und abgerufen werden, da die übergeordnete ID zugewiesen ist. Da der in wichtigem Punkt 2 erwähnte Rollback jedoch nicht durchgeführt werden kann, tritt bei einem Fehler beim Speichern mit untergeordneten Daten nur die übergeordneten Daten auf, was bei der Registrierung untergeordneter Daten Zeit und Mühe kostet. Ich werde am Ende. (Zum Beispiel manuelles Zuweisen einer übergeordneten ID) Wenn möglich, sind Einfügungen effizienter, wenn die übergeordneten und untergeordneten Daten in derselben Sitzung festgeschrieben werden.

Recommended Posts

So erhalten Sie die Eltern-ID mit sqlalchemy
Wie aktualisiere ich mit SQLAlchemy?
Wie mit SQLAlchemy ändern?
Wie lösche ich mit SQLAlchemy?
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
Wie fange ich mit Scrapy an?
Erste Schritte mit Python
Wie fange ich mit Django an?
So verbinden Sie INNER mit SQL Alchemy
Verwendung von SQLAlchemy / Connect mit aiomysql
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
So erhalten Sie Ergebnisse von id in Celery
Holen Sie sich die Tabelle dynamisch mit sqlalchemy
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
Einführung in RDB mit sqlalchemy Ⅰ
Wie man mit Theano besetzt
Holen Sie sich die Thread-ID mit Python
Wie man mit Python-Flüchen ein Urteil über das Mausrad erhält
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
So gelangen Sie mit Vagrant in die Python-Entwicklungsumgebung
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
So brechen Sie RT mit tweepy ab
Umgang mit Sitzungen in SQLAlchemy
Python: So verwenden Sie Async mit
Link, um mit Python zu beginnen
Stellen Sie mit SQL Alchemy eine Verbindung zu mehreren Datenbanken her
Holen Sie sich die AWS-Konto-ID mit boto3
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS
Umgang mit unausgeglichenen Daten
So erhalten Sie die Python-Version
Einführung in RDB mit sqlalchemy II
Umgang mit dem DistributionNotFound-Fehler
Aufblasen von Daten (Datenerweiterung) mit PyTorch
So berechnen Sie das Datum mit Python
So installieren Sie den MySQL-Connector mit pip3
So installieren Sie Anaconda mit pyenv
So erhalten Sie das Verzeichnis, in dem die mit Pyinstaller erstellte EXE-Datei vorhanden ist
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Verwendung der visuellen Erkennung, um die LINE ID von einem Mädchen zu erhalten
So erhalten Sie den gesamten Datenverkehr über VPN mit OpenVPN unter Linux
[Python] So erhalten Sie mit Enum einen Wert mit einem anderen Schlüssel als dem Wert
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Schritt Notizen, um mit Django zu beginnen
[Blender] So legen Sie shape_key mit dem Skript fest
Wie man mit matplotlib mehrere Figuren betitelt
Wie man lange Einschlüsse loswird
So fügen Sie ein Paket mit PyCharm hinzu
Wie bekomme ich IP bei Tornado + Nginx
Ich habe versucht, mit Hy anzufangen
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
Verwendung von ManyToManyField mit Djangos Admin
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)