Как я могу использовать несколько параметров с помощью pandas pd.read_sql_query?

#python #sql-server #pandas #parameter-passing

#python #sql-сервер #pandas #передача параметров

Вопрос:

Я пытаюсь передать три переменные в sql-запросе. Это регион, функция, новый пользователь. Я использую драйвер SQL, собственный клиент SQL Server 11.0.

Вот мой код, который работает.

 query = "SELECT LicenseNo FROM License_Mgmt_Reporting.dbo.MATLAB_NNU_OPTIONS  WHERE Region = ?"

data_df = pd.read_sql_query((query),engine,params={region})
  

вывод.

      LicenseNo
 0           12
 1            5
  

Вместо этого я хочу передать три переменные, и этот код не работает.

 query = "SELECT LicenseNo FROM License_Mgmt_Reporting.dbo.MATLAB_NNU_OPTIONS WHERE Region = ? and FeatureName = ? and NewUser =?"

nnu_data_df = pd.read_sql_query((query),engine,params={region, feature, newUser})
  

Вывод возвращает пустой фрейм данных.

 Empty DataFrame
Columns: [LicenseNo]
Index: []
  

Ответ №1:

попробуйте использовать строку в кортеже, также вы можете удалить () из запроса:

итак, вы могли бы сделать что-то вроде

 query = "SELECT LicenseNo FROM License_Mgmt_Reporting.dbo.MATLAB_NNU_OPTIONS WHERE Region = ? and FeatureName = ? and NewUser =?"
region = 'US'
feature = 'tall'
newUser = 'john'
data_df = pd.read_sql_query(query, engine, params=(region, feature , newUser))
  

Комментарии:

1. Привет, Стивен — Я преобразовал region, feature и newUser в строки и использовал ваш синтаксис, но все равно вернул пустой фрейм данных.

2. запрос = «ВЫБЕРИТЕ LicenseNo ИЗ License_Mgmt_Reporting.dbo.MATLAB_NNU_OPTIONS, ГДЕ Region = ? и FeatureName = ? и NewUser =?» Region = str (регион) FeatureName = str (функция) NewUser = str (новый пользователь) nnu_data_df = pd.read_sql_query(запрос, движок, параметры =(Регион, имя функции, новый пользователь))

3. извини, Стивен, я забыл тебя пометить

4. Может ли это работать даже со snowflake sql? даже после настройки snowflake.connector.paramstyle='qmark' у меня это не работает.

Ответ №2:

Моя ошибка оператора: (Я использовал неправильную переменную, и база данных не вернула результатов, потому что она не существовала!