#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:
Моя ошибка оператора: (Я использовал неправильную переменную, и база данных не вернула результатов, потому что она не существовала!