Python: Вызов запросов из файла с переменными

голоса
1

У меня есть несколько запросов в моем питон скрипт, который также использовать переменные в качестве параметров для извлечения данных. '''SELECT * FROM order_projections_daily WHERE days >= ''' + each + '''AND days < ''' + next_monday

Как я могу хранить запросы, как это в отдельный файл и назвать его прямо оттуда, а не зубрежка их в коде?

Я попытался сохранения запросов в файл и вызывая их в виде строки, но он не работает с переменными. он работает с: '''SELECT * FROM order_projections_daily'''

Это очень простой запрос, я использую гораздо более сложные запросы, в реальном случае.

Задан 23/06/2017 в 15:42
пользователем
На других языках...                            


2 ответов

голоса
2

Использование параметризованных strings-

'''SELECT * FROM order_projections_daily WHERE days >= %(start)s AND days < %(end)s'''

Позже, при выполнении запроса, построить Params , dictкак это:

params = {'start': ..., 'end': ...}

Этот PARAMS должен затем быть переданы функциями водителя DBC, которая будет заботиться о вставке параметров:

cursor.execute(query, params)

Примечание: Не вводить форматные строки в запросе, вы подвержены инъекции SQL таким образом.

Ответил 23/06/2017 в 15:46
источник пользователем

голоса
-3

Используйте питон форматирование строк.

В отдельном файле сохранить запрос, как показано ниже, например:

query = "select * from my_persons where name = {name} and age = {age}"

В питона файл, формат, то запрос следующим образом:

sql = query.format(name="jack", age=27)

Вы можете сохранить все ваши запросы в отдельном файле питона как строковые значения и импортировать все из них в свой код в любом месте. В моем, например, я предполагаю, что запрос будет сохранен в отдельном файле питона.

Форматирование запроса

query='''SELECT * FROM order_projections_daily WHERE days >={each} AND days < {next_monday}

Формат как:

sql = query.format(each=each, next_monday=next_monday)

Это хорошая практика, чтобы использовать метод форматирования или% или, может быть, даже присоединиться, а не с помощью конкатенации, как конкатенация создает промежуточные строковые объекты.

ИТАК форматирование является плохой идеей , то, посмотрите на это. Связывание имен в оракула https://stackoverflow.com/a/33882805/2196290

Ответил 23/06/2017 в 15:49
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more