如何用in\op正确构造查询

2024-06-01 02:44:09 发布

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

我有一个带有IN语句的SQL update查询,它是通过SQLAlchemy执行的。不幸的是,当前的实现使用了字符串插值,我想用更安全的选项来代替它。你知道吗

session.execute('''
        UPDATE servers SET
            cpu_cores=st.cpu_cores,
            cpu_mhz=st.cpu_mhz,
            ram_mb=st.ram_mb
        FROM servers
        WHERE
            server.provider_id IN (%s)
''' % ','.join([ ... ]))

这里是否可以用in_方法替换%运算符?或者我应该使用session.query重新实现这个查询?你知道吗


Tags: 字符串insqlsqlalchemysessionupdatemb语句
1条回答
网友
1楼 · 发布于 2024-06-01 02:44:09

如果您只想让它更安全,仍然可以在param占位符中插入:

session.execute("""UPDATE ... WHERE server.provider_id IN (%s)""" % ",".join("?" * len(provider_ids)), provider_ids)

?是占位符,根据所使用的DB驱动程序的^{}而变化。你知道吗

否则,最简单的方法是将其转换为session.queryupdate().where()构造。你知道吗

相关问题 更多 >