Cláusula IN de SQLAlchemy

Resuelto wonzbak asked hace 12 años • 8 respuestas

Estoy intentando hacer esta consulta en sqlalchemy.

SELECT id, name FROM user WHERE id IN (123, 456)

Me gustaría vincular la lista [123, 456]en el momento de la ejecución.

wonzbak avatar Dec 22 '11 18:12 wonzbak
Aceptado

Qué tal si

session.query(MyUserClass).filter(MyUserClass.id.in_((123,456))).all()

editar : Sin el ORM, sería

session.execute(
    select(
        [MyUserTable.c.id, MyUserTable.c.name], 
        MyUserTable.c.id.in_((123, 456))
    )
).fetchall()

select()toma dos parámetros, el primero es una lista de campos para recuperar, el segundo es la wherecondición. Puede acceder a todos los campos de un objeto de tabla a través de la propiedad c(o columns).

Simon avatar Dec 22 '2011 11:12 Simon

Suponiendo que utilice el estilo declarativo (es decir, clases ORM), es bastante fácil:

query = db_session.query(User.id, User.name).filter(User.id.in_([123,456]))
results = query.all()

db_sessionaquí está su sesión de base de datos, mientras que Useres la clase ORM __tablename__igual a "users".

Xion avatar Dec 22 '2011 11:12 Xion

Una forma alternativa es usar el modo SQL sin formato con SQLAlchemy, yo uso SQLAlchemy 0.9.8, python 2.7, MySQL 5.X y MySQL-Python como conector; en este caso, se necesita una tupla. Mi código aparece a continuación:

id_list = [1, 2, 3, 4, 5] # in most case we have an integer list or set
s = text('SELECT id, content FROM myTable WHERE id IN :id_list')
conn = engine.connect() # get a mysql connection
rs = conn.execute(s, id_list=tuple(id_list)).fetchall()

Espero que todo funcione para ti.

Jet Yang avatar Apr 08 '2015 04:04 Jet Yang