Python SQLAlchemy et Postgres - Comment interroger un élément JSON
Disons que j'ai une base de données Postgres (9.3) et il y a une table appelée Resources
. Dans le Resources
table, j'ai les champs id
qui est un int et data
qui est un type JSON.
Disons que j'ai les enregistrements suivants dans le tableau.
- 1, {"prenom":'Dave', 'nom':'Galant'}
- 2, {"prenom":'John', 'nom':'Doe'}
Ce que je veux faire est d'écrire une requête qui retourne tous les enregistrements pour lesquels les données de la colonne a un json avec le nom égal à "Doe"
J'ai essayé d'écrire quelque chose comme ceci:
records = db_session.query(Resource).filter(Resources.data->>'lastname' == "Doe").all()
Pycharm cependant me donne une erreur de compilation sur le "->>"
Personne ne sait comment j'aurais pu écrire la clause de filtre pour faire ce dont j'ai besoin?
- Essayez d'utiliser
astext
comme:...filter(Resources.c.data["lastname"].astext == "Doe").all()
et voir si cela fonctionne - Qui semble fonctionner, même si j'ai dû enlever le ".c" just go "des Ressources.les données" directement. Merci!
- Ah... oui, j'ai l'habitude d'aller avec
.c
pour le nom de la colonne... heureux que vous l'avez résolu. Je vais poster ci-dessus comme une réponse alors 🙂
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser astext
Veuillez noter que la colonne DOIT avoir un type de JSONB. Le régulier JSON colonne ne fonctionnera pas.
Vous pouvez également convertir explicitement chaîne JSON (voir Postgres JSON type de doc).
Selon sqlalchemy.les types.JSON, vous pouvez le faire comme ceci
Si vous êtes en utilisant JSON type (pas JSONB) la suite fonctionné pour moi:
Note le
'"object"'