쿼리 문자열에서 오는 선택적 매개 변수를 사용하여 SQLAlchemy에서 실행될 원시 SQL이 있습니다.SQLAlchemy의 선택적 매개 변수
는 내가로 문장을 구축하는 기능을했다 where 절 :
def queryParams(self, params):
params = urllib.parse.parse_qs(params)
query = ""
for (key, val) in params.items():
for value in val:
if(re.match("/(\d+(\.\d+)?)/", value) != False or (value == "false" or value == "true")):
query += ' AND ' + key + ' = ' + value
else:
query += ' AND ' + key + ' = ' + "'" + value + "'"
return query
문제 나 쿼리를 실행해야 할 때, 나는 SQL 문자열이 CONCAT해야하고 그것이 좋은 아니에요입니다 SQL 인젝션이 발생했습니다.
s = text(
'select a.cod_lim_judicial, a.desc_lim_judicial, a.dt_lim_judicial, '
'a.dt_validade, a.nr_mandado, a.tipo_liminar, a.folhas_incidencia, '
'a.num_folha, a.mes_ano_folha, p.mat_servidor, p.cod_depend, a.perc_pa '
'from folha.fl_liminar a, folha.fl_pens_x_liminar p '
'where a.cod_lim_judicial = p.cod_lim_judicial (+)' + self.queryParams(parameters))
result = conn.execute(s).fetchall()
어떻게 준비된 문을 사용하여 선택적 매개 변수를 사용할 수 있습니까?
미리 감사드립니다!
쿼리를 구성하는 ** SQLAlchemy의 ** 사용 뭐가 잘못? –
['re.match ("/ (\. \ d +)?] /", value)! = False'] (https://docs.python.org/3/library/re.html) # re.regex.match)는 항상 true가 될 것입니다. 왜냐하면're.match()'는 match 객체 나 None을 반환하기 때문입니다. –