Поместить слово с пробелами в качестве переменной в sql-запрос с помощью .format()
Я хотел бы узнать, как поместить слово с пробелом в качестве переменной в sql запрос (я использую postgresql)
data = "something with white space"
choice = "DESC"
limit = 10
def rDB(sql_request):
with connection.cursor() as cursor:
cursor.execute(sql_request)
row = cursor.fetchall()
return row
queryWithFormat(data, choice, limit):
return('''
SELECT col1, SUM(col2) as nb
FROM Table
WHERE col1 = {d}
ORDER BY nb {c}
LIMIT {l}
'''.format(d=data, c=choice, l=limit)
rDB(queryWithFormat(data, choice, limit))
django.db.utils.ProgrammingError: ERROR: syntax error on or near 'with'
LINE 8: WHERE col1 = something with white ...
-------------------------------^
Лучший способ - вообще не использовать встроенное в Python форматирование строк! Вместо этого следует создать параметризованный запрос.
Я думаю, что можно заставить ваш код работать, заключив переменную в кавычки col1 = '{d}'
, но я говорю вам это только для информации, и вы не должны этого делать . Это риск для безопасности. Для лучшей практики посмотрите этот раздел документации .
В сторону Django (не моя область знаний...), похоже, что вы используете SQLAlchemy для выполнения запроса. Эта библиотека имеет собственный синтаксис и методы для связывания параметров, которые вы могли бы реализовать следующим образом:
from sqlalchemy.sql import text
def query_with_format(data, choice, limit):
query = text("""
SELECT col1, SUM(col2) as nb
FROM Table
WHERE col1 = :d
ORDER BY nb :c
LIMIT :l
""")
query.bindparams(d=data, c=choice, l=limit)
return query
rDB(query_with_format(data, choice, limit))
Я не думаю, что при таком подходе у вас возникнут проблемы с переменными, содержащими пробелы, и это намного, намного безопаснее.