Python pd.read_sql, где вызывают параметры - PullRequest
0 голосов
/ 06 июня 2018

Вариант использования: У нас есть вложенные запросы, и в наших таблицах содержится от 10 до 20 миллионов строк.Здесь мы намерены уменьшить время процессора запроса с помощью интеллектуального фильтра

. Мне нравится фильтровать мои столбцы в pd.read_sql по имени другого столбца фрейма данных.Это возможно?

Шаг 1: фрейм данных df1 age1 и age3 - мои будущие столбцы фильтра для pd.read_sql

raw_data1 = {'age1': [23,45,21],'age2': [10,20,50], 'age3':['forty','fortyone','fortyfour']}
    df1 = pd.DataFrame(raw_data1, columns = ['age1','age2','age3'])
    df1

Step2: Мне нравится брать age1 изВыше df1 dataframe хотите использовать ниже pd.read_sql, как показано ниже, чтобы получить item1 dataframe

item1 = pd.read_sql("""
SELECT * from [dbo].[ITEM]
where item_age1 = df1.age1
""", conn)

Шаг 3: Мне нравится брать age3 сверху df1 dataframe, который хотите использовать ниже pd.read_sql, как показано ниже, чтобы получить item2датафрейм

item2 = pd.read_sql("""
SELECT * from [dbo].[ITEM]
where item_age3 = df1.age3
""", conn)

1 Ответ

0 голосов
/ 06 июня 2018

Используйте параметризованный запрос:

item2 = pd.read_sql("""
SELECT * from [dbo].[ITEM]
where item_age3 IN ({})
""".format(','.join('?'*len(df1.age3))), conn, 
params=list(df1.age3))

, в зависимости от серверной части базы данных этот синтаксис может использовать '%s' или %(name)s вместо '?'.См. PEP249 paramstyle для получения дополнительной информации.

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