克劳斯的炼金术

2024-05-04 01:49:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用sqlalchemy进行这个查询

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

我想在执行时绑定列表[123, 456]


Tags: nameinfromid列表sqlalchemywhereselect
3条回答

假设您使用声明式样式(即ORM类),这非常简单:

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

这里的db_session是数据库会话,而User是ORM类,其__tablename__等于"users"

怎么样

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

编辑:如果没有ORM,则

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

^{}接受两个参数,第一个参数是要检索的字段列表,第二个参数是where条件。您可以通过c(或columns)属性访问表对象上的所有字段。

另一种方法是使用带有SQLAlchemy的原始SQL模式,我使用SQLAlchemy 0.9.8、python 2.7、MySQL 5.X和MySQL python作为连接器,在这种情况下,需要一个元组。我的代码如下:

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()

希望一切都对你有用。

相关问题 更多 >