#python #django #parameters #rawsql
#python #django #параметры #rawsql
Вопрос:
У меня проблема при выполнении необработанного sql в Django.
res = []
start = '2017-12-08T01:56:56.701Z'
end = '2020-12-08T01:56:56.701Z'
with connection.cursor() as cursor:
raw_sql = '''
select
case
when content like '%products%' then 'Products'
else 'Others'
end as name,
count(id) as times
from mytable
where somefield LIKE "%somefieldcontent%"
and created between '%s' and '%s'
'''
cursor.execute(raw_sql, [start, end])
res = cursor.fetchall()
Возникает следующая ошибка: символ неподдерживаемого формата «‘ (0x27)
Я попытался выполнить этот sql непосредственно в mysql, он работает. Но это не работает в среде Django. Я думаю, что, должно быть, что-то не так, что я делаю со строкой.
По сути, я хочу использовать параметры вместо concat для построения инструкции SQL. Есть идеи? Спасибо!
Комментарии:
1. это в вашем представлении django?
2. просто функция, используемая где-то.
Ответ №1:
Вы можете попробовать использовать f-string, что-то вроде этого
from django.db import connection
start = '2017-12-08T01:56:56.701Z'
end = '2020-12-08T01:56:56.701Z'
def query_example(start, end):
cursor = connection.cursor()
cursor.execute(
f'''
select
case
when content like '%products%' then 'Products'
else 'Others'
end as name,
count(id) as times
from mytable
where somefield LIKE "%somefieldcontent%"
and created between {start} and {end}
'''
)
return cursor.fetchall()
И затем вы можете получить доступ к данным в представлениях, вызвать query_example func
def request_data(request):
data = query_example(...)
# do something...
...
return JsonResponse(data, safe=False)
or
return render(request, "your_template.html", {"data": data})