J'ai besoin d'interroger une base de données SQLAlchemy en fonction de son id
quelque chose de similaire à
User.query.filter_by(username='peter')
mais pour l'identité. Comment dois-je m'y prendre ? [La recherche sur Google et SO n'a rien donné.]
J'ai besoin d'interroger une base de données SQLAlchemy en fonction de son id
quelque chose de similaire à
User.query.filter_by(username='peter')
mais pour l'identité. Comment dois-je m'y prendre ? [La recherche sur Google et SO n'a rien donné.]
La requête a un fonction de réception qui prend en charge l'interrogation par la clé primaire de la table, ce qui, je suppose que id
est.
Par exemple, pour rechercher un objet dont l'ID est 23 :
User.query.get(23)
Remarque : comme l'ont mentionné quelques autres commentateurs et réponses, il ne s'agit pas simplement d'un raccourci pour "Effectuer une requête en filtrant sur la clé primaire". En fonction de l'état de la session SQLAlchemy, l'exécution de ce code peut interroger la base de données et renvoyer une nouvelle instance, ou renvoyer une instance d'un objet interrogé plus tôt dans votre code sans interroger réellement la base de données. Si vous ne l'avez pas encore fait, pensez à lire l'article intitulé documentation sur la session SQLAlchemy pour comprendre les ramifications.
get() ne correspond pas toujours à vos attentes :
si votre transaction a été faite :
>>> session.query(User).get(1)
[SQL]: BEGIN (implicit)
[SQL]: SELECT user.id AS user_id, user.name AS user_name, user.fullname AS user_fullname
FROM user
WHERE user.id = ?
[SQL]: (1,)
<User(u'ed', u'Ed Jones')>
si vous êtes dans une transaction (get() vous donnera l'objet résultat en mémoire sans interroger la base de données) :
>>> session.query(User).get(1)
<User(u'ed', u'Ed Jones')>
Il est préférable d'utiliser ceci :
>>> session.query(User.name).filter(User.id == 1).first()
[SQL]: SELECT user.name AS user_name
FROM user
WHERE user.id = ?
LIMIT ? OFFSET ?
[SQL]: (1, 1, 0)
(u'Edwardo',)
Si vous utilisez tables reflection
vous pourriez avoir des problèmes avec les solutions proposées. (Les solutions précédentes ici n'ont pas fonctionné pour moi).
Ce que j'ai fini par utiliser est :
session.query(object._class_).get(id)
( object
a été récupéré par réflexion depuis la base de données, c'est pourquoi vous devez utiliser .__class__
)
J'espère que cela vous aidera.
Tout d'abord, vous devez définir id
comme clé primaire.
Vous pourriez alors utiliser le query.get()
pour interroger les objets par id
qui est déjà la clé primaire.
Depuis le query.get()
pour interroger les objets par la clé primaire.
Déduit de Documentation de Flask-SQLAlchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
def test():
id = 1
user = User.query.get(id)
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.