您可以在 sql_raw 查询中使用 {}(格式)来指定日期吗?
Can you use {} (format) within sql_raw query for assigning a date?
我希望使用变量在 sql 查询中分配日期,而不是手动输入。我在下面尝试了以下但我得到了 IndexError: tuple index out of range
us_ids #list of ids
placeholders_id = ','.join('%s' for i in range(len(us_ids))) # '?,?'
start = '2000/01/01'
end = '2020/12/31'
需要查询
sql_query = '''
SELECT *
FROM a.b
WHERE date between ({}) and ({})
and relevance >= 90
and id IN ({})'''.format(start, end, placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(us_ids))
当我手动设置日期时,如下所示。
sql_query = '''
SELECT *
FROM a.b
WHERE date between '2000/01/01' and '2020/12/01'
and relevance >= 90
and id IN ({})'''.format(start, end, placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(us_ids))
任何帮助都会很棒!!
Can you use {} (format) within sql_raw query for assigning a date?
请不要这样做。正如您所演示的那样,使用字符串格式将值传递给查询很容易出错,并且可能导致 SQL 注入。使用与处理 IN 值列表时完全相同的方法来传递日期文字:
sql_query = '''
SELECT *
FROM a.b
WHERE date between %s and %s
and relevance >= 90
and id IN ({})'''.format(placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(start, end, *us_ids))
我希望使用变量在 sql 查询中分配日期,而不是手动输入。我在下面尝试了以下但我得到了 IndexError: tuple index out of range
us_ids #list of ids
placeholders_id = ','.join('%s' for i in range(len(us_ids))) # '?,?'
start = '2000/01/01'
end = '2020/12/31'
需要查询
sql_query = '''
SELECT *
FROM a.b
WHERE date between ({}) and ({})
and relevance >= 90
and id IN ({})'''.format(start, end, placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(us_ids))
当我手动设置日期时,如下所示。
sql_query = '''
SELECT *
FROM a.b
WHERE date between '2000/01/01' and '2020/12/01'
and relevance >= 90
and id IN ({})'''.format(start, end, placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(us_ids))
任何帮助都会很棒!!
Can you use {} (format) within sql_raw query for assigning a date?
请不要这样做。正如您所演示的那样,使用字符串格式将值传递给查询很容易出错,并且可能导致 SQL 注入。使用与处理 IN 值列表时完全相同的方法来传递日期文字:
sql_query = '''
SELECT *
FROM a.b
WHERE date between %s and %s
and relevance >= 90
and id IN ({})'''.format(placeholders_id)
sql_call = conn.raw_sql(sql_query, params=(start, end, *us_ids))