2016-08-12 7 views
0

SQLAlchemyを介して実行されるIN文を使用したSQL更新クエリがあります。残念ながら現在の実装では文字列補間が使用されていますが、これはより安全なオプションに置き換えていきたいものです。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

、あなたはまだのparamプレースホルダに補間することができます。

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

?をプレースホルダであり、DBドライバのparamstyleによって異なります使っている。

これ以外の場合、最も簡単な方法は、これをsession.queryまたはupdate().where()構造に変換することです。

関連する問題