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.
Oder vielleicht .in_(list) verwenden, ähnlich wie @Carl bereits vorgeschlagen hat als
stmt = select(
id,
name
).where(
id.in_(idlist),
)
Vollständiger Code unter der Annahme, dass Sie das Datenmodell in der Klasse User haben:
def fetch_name_ids(engine, idlist):
# create an empty dataframe
df = pd.DataFrame()
try:
# create session with engine
session = Session(engine, future=True)
stmt = select(
User.id,
User.name
).where(
User.id.in_(idlist),
)
data = session.execute(stmt)
df = pd.DataFrame(data.all())
if len(df) > 0:
df.columns = data.keys()
else:
columns = data.keys()
df = pd.DataFrame(columns=columns)
except SQLAlchemyError as e:
error = str(e.__dict__['orig'])
session.rollback()
raise error
else:
session.commit()
finally:
engine.dispose()
session.close()
return df
In dieser Frage wurde eine Lösung für die Select-Abfrage gepostet, leider funktioniert sie nicht für die Update-Abfrage. Mit dieser Art und Weise, auch es würde helfen, Bedingungen auch auswählen.
Abfrage aktualisieren Lösung:
id_list = [1, 2, 3, 4, 5] # in most cases we have an integer list or set
query = 'update myTable set content = 1 WHERE id IN {id_list}'.format(id_list=tuple(id_list))
conn.execute(query)
Nota : Verwenden Sie eine Tupel anstelle einer Liste.
Nur eine Ergänzung zu den obigen Antworten.
Wenn Sie ein SQL mit einer "IN"-Anweisung ausführen möchten, können Sie dies tun:
ids_list = [1,2,3]
query = "SELECT id, name FROM user WHERE id IN %s"
args = [(ids_list,)] # Don't forget the "comma", to force the tuple
conn.execute(query, args)
Zwei Punkte:
EDIT Achten Sie darauf, dass dies zu einem Fehler führt, wenn die Länge der Liste eins oder null ist!
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.