[PYTHON] So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch

Überblick

Der Versuch, ein Zeilenobjekt in SQLAlchemy wie einen Wörterbuchtyp zu behandeln, funktioniert nicht, da die Typen unterschiedlich sind. Es gibt mehrere Muster, aber ich werde zwei Methoden vorstellen.

Es ist leichter zu verstehen, ob es ein konkretes Beispiel gibt, daher werde ich es anhand der folgenden Todo-Klasse als Beispiel erläutern.

class Todo(db.Model):
	__tablename__ = 'todos'
	id = db.Column( db.Integer, primary_key=True )
	description = db.Column( db.String(), nullable=False )
	completed = db.Column( db.Boolean, nullable=False, default=False )

	def __repr__(self):
		return f'<Todo {self.id} {self.description}>'

Methode 1 (Zugriff auf dict)

Sie können Wörterbuchwerte abrufen, indem Sie auf die Eigenschaft __dict__ zugreifen. Beachten Sie jedoch, dass diese Methode auch die Eigenschaft "_sa_instance_state" erhält.

todo = Todo.query.first()
print( todo.__dict__ )
# {'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x10f4559e8>, 'completed': False, 'id': 17, 'description': 'TASK1'}

Methode 2 (Bereiten Sie eine Funktion vor, die auf der Klassenseite einen Diktattyp zurückgibt.)

Sie können auch Wörterbuchwerte abrufen, indem Sie eine Funktion vorbereiten, die Wörterbuchwerte auf der Klassenseite zurückgibt.

todo = Todo.query.first()
print( todo.toDict() )
# {'id': 17, 'description': 'TASK1', 'completed': False}

class Todo(db.Model):
	__tablename__ = 'todos'
	id = db.Column( db.Integer, primary_key=True )
	description = db.Column( db.String(), nullable=False )
	completed = db.Column( db.Boolean, nullable=False, default=False )
	list_id = db.Column( db.Integer, db.ForeignKey('todolists.id'), nullable=False )

	def __repr__(self):
		return f'<Todo {self.id} {self.description}>'

	def toDict(self):
		return {
			'id': self.id,
			'description': self.description,
			'completed': self.completed
		}

Für die Suche

** 1. Fehler beim Versuch, einem Zeilenobjekt eine Eigenschaft hinzuzufügen **

todo = Todo.query.first()
todo['label'] = 'Important'
# TypeError: 'Todo' object does not support item assignment

** 2. Fehler beim Versuch, eine Typkonvertierung mit der Funktion dict () durchzuführen **

todo = Todo.query.first()
dict(todo)
# TypeError: 'Todo' object is not iterable

Recommended Posts

So konvertieren Sie ein Klassenobjekt mit SQLAlchemy in ein Wörterbuch
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Wie aktualisiere ich mit SQLAlchemy?
Wie mit SQLAlchemy ändern?
Wie lösche ich mit SQLAlchemy?
So konvertieren / wiederherstellen Sie einen String mit [] in Python
So verbinden Sie INNER mit SQL Alchemy
So fügen Sie ein Paket mit PyCharm hinzu
[Python] Wie man eine Klasse iterierbar macht
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Verwendung von SQLAlchemy / Connect mit aiomysql
Lesen einer CSV-Datei mit Python 2/3
So senden Sie eine Nachricht mit Curl an LINE
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
So erstellen Sie ein Funktionsobjekt aus einer Zeichenfolge
So generieren Sie ein Python-Objekt aus JSON
Speichern Sie das Objekt in einer Datei mit pickle
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Konvertieren von (32,32,3) in einen 4-dimensionalen Tensor (1,32,32,1) mit ndarray-Typ
Verwendung des Wörterbuchs {}
[Vorläufig] So konvertieren Sie eine Zeichenfolge mit kivy-ios Memo kivy v1.8.0 in Shift_jis
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Konvertieren Sie eine Textdatei mit hexadezimalen Werten in eine Binärdatei
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
So konvertieren Sie horizontal gehaltene Daten mit Pandas in vertikal gehaltene Daten
Wie man ein Schießspiel mit toio macht (Teil 1)
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
So exportieren / importieren Sie ein Zope-Objekt von Zope, das mit Plone-4.1.5-UnifiedInstaller-20120604.tgz installiert wurde
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
So konvertieren Sie ein Mel-Spektrogramm zurück in eine WAV-Datei
Konvertieren / Zurückgeben von Klassenobjekten in das JSON-Format in Python
[Morphologische Analyse] So fügen Sie Mecab ein neues Wörterbuch hinzu
[Python] So erstellen Sie mit Matplotlib ein zweidimensionales Histogramm
[Python] Wie zeichnet man mit Matplotlib ein Streudiagramm?
Verwendung der Python-Multiprocessing (Fortsetzung 3) apply_async in einer Klasse mit Pool als Mitglied
So rufen Sie eine Funktion auf
Einführung in RDB mit sqlalchemy Ⅰ
Wie man mit Theano besetzt
Wie man ein Terminal hackt
So trennen Sie Zeichenfolgen mit ','
Wie man RDP auf Fedora31 macht
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
So geben Sie ein Dokument im PDF-Format mit Sphinx aus
Verwendung der Methode __call__ in der Python-Klasse
[Python] Wie man mit Klassenvariablen mit Dekorator und Metaklasse spielt
So erstellen Sie mit snappyHexMesh ein Flussnetz um einen Zylinder
So drucken Sie Zeichen als Tabelle mit der Druckfunktion von Python
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
Ich habe versucht, mit Hy ・ Define a class zu beginnen
So zeigen Sie eine Liste der mit pyenv installierbaren Versionen an
So extrahieren Sie mit Numpy einen anderen als einen bestimmten Index
Eine Geschichte über den Umgang mit dem CORS-Problem
Erstellen einer Entwicklungsumgebung für die Python2.7-Serie mit Vagrant
Konvertieren Sie das Tweepy Status-Objekt in JSON
So legen Sie eine Verknüpfung fest, um in IBus zwischen voller und halber Breite zu wechseln