2016-08-12 74 views
0

我有一個SQL更新查詢,它帶有通過SQLAlchemy執行的IN語句。不幸的是,當前的實現使用了字符串插值,我想用更安全的選項來替換它。如何正確使用in_運算符構造查詢

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

回答

1

如果你想要做的是,使之更安全,你仍然可以插在參數佔位符:

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

?是佔位符,取決於數據庫驅動程序的paramstyle你正在使用。

否則,最簡單的方法是將其轉換爲session.queryupdate().where()結構。