[PYTHON] Comment convertir un objet de classe en dictionnaire avec SQLAlchemy

Aperçu

Tenter de traiter un objet ligne dans SQLAlchemy de la même manière qu'un type de dictionnaire ne fonctionne pas car les types sont différents. Il existe plusieurs modèles, mais je présenterai deux méthodes.

Il est plus facile de comprendre s'il existe un exemple concret, je vais donc l'expliquer en me basant sur la classe Todo ci-dessous à titre d'exemple.

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

Méthode 1 (accès __dict__)

Vous pouvez obtenir des valeurs de type dictionnaire en accédant à la propriété __dict__. Cependant, veuillez noter que cette méthode obtient également la propriété _sa_instance_state.

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

Méthode 2 (préparer une fonction qui renvoie un type de dict du côté de la classe)

Vous pouvez également obtenir des valeurs de type dictionnaire en préparant une fonction qui renvoie des valeurs de type dictionnaire côté classe.

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
		}

Pour la recherche

** 1. Erreur lors de la tentative d'ajout d'une propriété à un objet de ligne **

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

** 2. Erreur lors de la tentative de conversion de type à l'aide de la fonction dict () **

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

Recommended Posts

Comment convertir un objet de classe en dictionnaire avec SQLAlchemy
Comment convertir un tableau en dictionnaire avec Python [Application]
Comment créer un dictionnaire avec une structure hiérarchique.
Comment mettre à jour avec SQLAlchemy?
Comment modifier avec SQLAlchemy?
Comment supprimer avec SQLAlchemy?
Comment convertir / restaurer une chaîne avec [] en python
Comment INNER JOIN avec SQL Alchemy
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment utiliser SQLAlchemy / Connect avec aiomysql
Comment lire un fichier CSV avec Python 2/3
Comment envoyer un message à LINE avec curl
Comment dessiner un graphique à 2 axes avec pyplot
Comment créer un objet fonction à partir d'une chaîne
Comment générer un objet Python à partir de JSON
Enregistrer l'objet dans un fichier avec pickle
Procédure de création d'application multi-plateforme avec kivy
Comment convertir (32,32,3) en tenseur à 4 dimensions (1,32,32,1) avec le type ndarray
Comment utiliser le dictionnaire {}
[Tentative] Comment convertir une chaîne de caractères en Shift_jis avec kivy-ios Memo kivy v1.8.0
[Python] Comment dessiner un graphique linéaire avec Matplotlib
Comment créer un sous-menu avec le plug-in [Blender]
Convertir un fichier texte avec des valeurs hexadécimales en fichier binaire
Comment obtenir un utilisateur connecté avec les forms.py de Django
Comment convertir des données détenues horizontalement en données détenues verticalement avec des pandas
Comment faire un jeu de tir avec toio (partie 1)
Comment écrire un type liste / dictionnaire de Python3
Comment exporter / importer l'objet zope de Zope installé avec Plone-4.1.5-UnifiedInstaller-20120604.tgz
Comment obtenir plus de 1000 données avec SQLAlchemy + MySQLdb
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
Comment convertir un spectrogramme Mel en un fichier wav
Convertir / renvoyer des objets de classe au format JSON en Python
[Analyse morphologique] Comment ajouter un nouveau dictionnaire à Mecab
[Python] Comment créer un histogramme bidimensionnel avec Matplotlib
[Python] Comment dessiner un diagramme de dispersion avec Matplotlib
Comment utiliser le multitraitement python (suite 3) apply_async en classe avec Pool en tant que membre
Comment appeler une fonction
Introduction à RDB avec sqlalchemy Ⅰ
Comment lancer avec Theano
Comment pirater un terminal
Comment séparer les chaînes avec ','
Comment faire RDP sur Fedora31
Comment déployer une application Web créée avec Flask sur Heroku
Comment sortir un document au format pdf avec Sphinx
Comment utiliser la méthode __call__ dans la classe Python
[Python] Comment jouer avec les variables de classe avec décorateur et métaclasse
Comment créer un maillage de flux autour d'un cylindre avec SnappyHexMesh
Comment imprimer des caractères sous forme de tableau avec la fonction d'impression de Python
Comment faire un simple jeu Flappy Bird avec Pygame
J'ai essayé de commencer avec Hy ・ Définir une classe
Comment afficher une liste des versions installables avec pyenv
Comment extraire un index autre qu'un index spécifique avec Numpy
Une histoire sur la façon de traiter le problème CORS
Comment créer un environnement de développement de la série Python2.7 avec Vagrant
Convertir l'objet Statut Tweepy en JSON
Comment définir un raccourci pour basculer entre pleine largeur et demi-largeur dans IBus