2016-08-12 4 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() 구조로 변환하는 것입니다.

관련 문제