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}>'
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'}
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
}
** 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