Necesito consultar una base de datos SQLAlchemy por idalgo similar a
User.query.filter_by (nombre de usuario = 'peter')
pero para id. ¿Cómo hago esto? [Buscar en Google y SO no ayudó]
python
sql
model
sqlalchemy
Oerd
fuente
fuente

Respuestas:
Query tiene una función de obtención que admite consultas mediante la clave principal de la tabla, que supongo que sí
id.Por ejemplo, para consultar un objeto con ID de 23:
User.query.get(23)Nota: Como han mencionado algunos otros comentaristas y respuestas, esto no es simplemente una abreviatura de "Realizar un filtrado de consultas en la clave principal". Dependiendo del estado de la sesión de SQLAlchemy, ejecutar este código puede consultar la base de datos y devolver una nueva instancia, o puede devolver una instancia de un objeto consultado anteriormente en su código sin consultar realmente la base de datos. Si aún no lo ha hecho, considere leer la documentación sobre la sesión de SQLAlchemy para comprender las ramificaciones.
fuente
YourModel.query.get((pk1, pk2)). Observe la tupla.get()función consulta objetos por clave primaria. Si desea realizar una consultaid,idprimero debe establecerla como clave principal.Puede consultar a un usuario con id = 1 como este
session.query(User).get(1)fuente
get () no es como esperabas a veces:
si su transacción se realizó:
>>> 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 está en una transacción (get () le dará el objeto de resultado en la memoria sin consultar la base de datos):
>>> session.query(User).get(1) <User(u'ed', u'Ed Jones')>mejor usar esto:
>>> 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',)fuente
get()parece darle el objeto de resultado en la memoria (sin consultar realmente la base de datos), perofilter().first()siempre consultará la base de datos.getes mejor usarlo debido al aumento de la eficiencia.getes más eficiente.Si lo usa
tables reflection, puede tener problemas con las soluciones proporcionadas. (Las soluciones anteriores aquí no funcionaron para mí).Lo que terminé usando fue:
session.query(object._class_).get(id)(
objectse recuperó por reflexión de la base de datos, es por eso que debe usar.__class__)Espero que esto ayude.
fuente
Primero, debe establecer
idcomo clave principal.Luego, podría usar el
query.get()método para consultar objetos por losidque ya es la clave principal.Desde el
query.get()método para consultar objetos por clave primaria.Inferido de la documentación 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)fuente