передача строковых аргументов для фильтрации строк базы данных в python - PullRequest
0 голосов
/ 22 мая 2018

у меня есть написанная ниже функция для фильтрации столбца в SQL-запросе, функция принимает строковый аргумент, который будет введен в 'where clause'

def summaryTable(machineid):
 df=pd.read_sql(""" SELECT fld_ATM  FROM [003_tbl_ATM_Tables] 
    WHERE (LINK <> 1) AND (fld_ATM =('machineid')) ;
     """,connection)
connection.close()
return df

функция возвращает пустой Dataframe,я знаю, что сам запрос является правильным, потому что я получаю ожидаемые данные, когда я 'жёстко кодирую' идентификатор машины

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Используйте params для передачи набора параметров, включая machineid в read_sql.pyodbc заменяет символ ? в вашем запросе параметрами из кортежа по порядку.Их значения будут безопасно подставлены во время выполнения.Это позволяет избежать опасных проблем форматирования строк, которые могут привести к внедрению SQL.

df = pd.read_sql(""" SELECT fld_ATM  FROM [003_tbl_ATM_Tables] 
                     WHERE (LINK <> 1) AND (fld_ATM = ?) ;
                 """, connection, params=(machineid,)) 
0 голосов
/ 22 мая 2018

Вам необходимо добавить machineid для запроса, используя params .

# ? is the placeholder style used by pyodbc. Some use %s, for example.
query = """ SELECT fld_ATM  FROM [003_tbl_ATM_Tables] 
        WHERE (LINK <> 1) AND (fld_ATM = ?) ;
         """
data_df = pd.read_sql_query(query, engine, params=(machineid, ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...