Есть ли способ использовать read_sql_query и запрос имеет WHERE column = Variable? - PullRequest
0 голосов
/ 17 октября 2019

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

Я уже пробовал

pd.read_sql_query

для создания фрейма данных

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

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = ?",(Val), c)

, где Valэто кортеж из одного элемента, в котором хранится значение кода продукта, введенного пользователем, а StoringTF - это основная таблица, из которой я пытаюсь извлечь данные.

Надеюсь, вы поняли, что я хочу сделать, потому чточто-то не так с синтаксисом, и это заставляет python ожидать, что он будет sqlalchemy. Спасибо и надеюсь, что вы можете помочь.

Ответы [ 5 ]

1 голос
/ 17 октября 2019

С помощью pyformat вы можете написать это так:

Val = 'abc'
product = pd.read_sql_query(
    "SELECT * FROM StoringTF WHERE Product_Code = %(val)s",
    c, params={'val': Val}
)

Форматирование строки в python, как предлагается в некоторых ответах, открывает шанс для внедрения SQL или просто ошибок, вызванных некоторыми специальными символами впеременная.

0 голосов
/ 17 октября 2019

В вашем исходном коде произошла ошибка, а именно: (Val) не является кортежем из 1 элемента.

Вы можете посмотреть Как создать кортеж только с одним элементом и Документация Python для более подробной информации.

Ваш оригинальный код должен быть в порядке с дополнительной запятой, то есть:

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = ?",(Val,), c)
0 голосов
/ 17 октября 2019

Вы можете попробовать это

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = {}".format(Val), c)
0 голосов
/ 17 октября 2019

Если вы используете Python 3.6 или выше, самый эффективный способ манипулирования строками называется так называемыми "f-строками", это намного быстрее, чем любым другим способом:

product = pd.read_sql_query(f"SELECT * FROM StoringTF WHERE Product_Code = {Val}", c)
0 голосов
/ 17 октября 2019

Вы можете сделать:

product = pd.read_sql_query("SELECT * FROM StoringTF WHERE Product_Code = %s" % str(your_variable), c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...