Есть ли способ динамически запрашивать postgres db из пользовательских входов Flask? - PullRequest
0 голосов
/ 30 января 2019

Мне нужно динамически запрашивать базу данных Postgres на основе пользовательского ввода веб-приложения Flask.У меня он работал в Python, но когда я переместил его во Flask, он перестал работать.Я сузил это до проблемы с вставкой переменной в запрос.

def predict_page(): 
    address_lookup = '10 West 28 Street' 
    # eventually this would take a user input like below 
    # address_lookup = request.args.get('address') 
    sq = """SELECT noise, population_density, median_home_value, 
            median_household_income, yearbuilt, vacant FROM     
            lookup_table WHERE address = %(input_address)s;""" 
    param = {'input_address':address_lookup} 
    query_results = pd.read_sql_query(sq, con, params = param)                   
    query_results = query_results.to_json() 
    return query_results

Когда я явно пишу адрес в запросе вместо переменной, он работает.

def predict_page(): 
    sq = """SELECT noise, population_density, median_home_value,          
    median_household_income, yearbuilt, vacant FROM lookup_table 
    WHERE address = '10 West 28 Street';""" 
    query_results = pd.read_sql_query(sq, con) 
    query_results = query_results.to_json() 
    return query_results

1 Ответ

0 голосов
/ 30 января 2019

Я думаю, что все, чего вам не хватает, это одиночные кавычки в строке sq:

address_lookup = '10 West 28 Street'
sq = """SELECT noise, population_density, median_home_value, 
median_household_income, yearbuilt, vacant FROM
lookup_table WHERE address = '%s';""" % address_lookup

print sq

Вывод:

SELECT noise, population_density, median_home_value, 
median_household_income, yearbuilt, vacant FROM
lookup_table WHERE address = '10 West 28 Street';

Примечание

Я написал этот ответ, чтобы его можно было запускать отдельно, поскольку я хотел сосредоточиться на проблеме пропущенных одинарных кавычек.Любой, кто использует read_sql_query, должен, вероятно, использовать любой синтаксис передачи параметров, необходимый для того, чтобы сервер мог выполнить очистку ввода.Вы НЕ хотите обойти проверку параметров на стороне сервера, используя форматирование Python для вставки параметров в строку запроса SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...