Ich versuche, diese Abfrage in Sqlalchemy durchzuführen
SELECT id, name FROM user WHERE id IN (123, 456)
Ich möchte die Liste binden [123, 456]
zur Ausführungszeit.
Ich versuche, diese Abfrage in Sqlalchemy durchzuführen
SELECT id, name FROM user WHERE id IN (123, 456)
Ich möchte die Liste binden [123, 456]
zur Ausführungszeit.
Wie wäre es mit
session.query(MyUserClass).filter(MyUserClass.id.in_((123,456))).all()
editar : Ohne den ORM wäre es
session.execute(
select(
[MyUserTable.c.id, MyUserTable.c.name],
MyUserTable.c.id.in_((123, 456))
)
).fetchall()
select()
benötigt zwei Parameter, der erste ist eine Liste der abzurufenden Felder, der zweite ist die where
Zustand. Sie können auf alle Felder eines Tabellenobjekts über die c
(oder columns
) Eigenschaft.
Vorausgesetzt, Sie verwenden den deklarativen Stil (d.h. ORM-Klassen), ist es ziemlich einfach:
query = db_session.query(User.id, User.name).filter(User.id.in_([123,456]))
results = query.all()
db_session
ist hier Ihre Datenbanksitzung, während User
ist die ORM-Klasse mit __tablename__
gleich "users"
.
Ein alternativer Weg ist die Verwendung von rohem SQL-Modus mit SQLAlchemy, ich verwende SQLAlchemy 0.9.8, Python 2.7, MySQL 5.X und MySQL-Python als Konnektor, in diesem Fall wird ein Tupel benötigt. Mein Code ist unten aufgeführt:
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()
Ich hoffe, dass alles für Sie funktioniert.
Ich wollte nur meine Lösung mit Sqlalchemy und Pandas in Python 3 teilen. Vielleicht würde man es nützlich finden.
import sqlalchemy as sa
import pandas as pd
engine = sa.create_engine("postgresql://postgres:my_password@my_host:my_port/my_db")
values = [val1,val2,val3]
query = sa.text("""
SELECT *
FROM my_table
WHERE col1 IN :values;
""")
query = query.bindparams(values=tuple(values))
df = pd.read_sql(query, engine)
Mit der Ausdrucks-API, nach der in dieser Frage gefragt wird, können Sie die in_
Methode der betreffenden Spalte.
Zur Abfrage
SELECT id, name FROM user WHERE id in (123,456)
verwenden.
myList = [123, 456]
select = sqlalchemy.sql.select([user_table.c.id, user_table.c.name], user_table.c.id.in_(myList))
result = conn.execute(select)
for row in result:
process(row)
Dies setzt voraus, dass user_table
y conn
angemessen definiert wurden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.