Считать базу данных в фрейм данных, используя pyodb c с параметризованным запросом - PullRequest
0 голосов
/ 25 февраля 2020

Я использую pyodb c для получения данных с SQL Сервера, используя скрипт, показанный здесь:

conn = pyodbc.connect('DSN=DATASOURCE')
tbl = "SELECT TableA.Field_1 \
    FROM TableA \
    WHERE TableA.Date>=2019/04/01"
SQL_Query = pd.read_sql_query(tbl, conn)
conn.close

Теперь я хочу превратить этот запрос в функцию Python, где я могу изменить дату (2019/04/01) в приведенном выше примере в качестве переменной функции.

Я обнаружил, что pyodb c предлагает параметризацию , но все в контексте функции cursor.execute.

В идеале я хотел бы создать такую ​​функцию:

def DB_Query(date):
    conn = pyodbc.connect('DSN=DATASOURCE')
    tbl = "SELECT TableA.Field_1 \
    FROM TableA \
    WHERE TableA.Date>=?", date
    SQL_Query = pd.read_sql_query(tbl, conn)
    conn.close
    return SQL_Query

Очевидно, это не работает, потому что tbl должна быть нормальной строкой, но возможно ли использовать функцию параметризации pyodb c вместе с pandas 'pd.read_sql_query или pd.read_sql?

1 Ответ

1 голос
/ 25 февраля 2020

Вы можете параметризовать read_sql_query так же, как и cursor.execute, установив параметр params: https://pandas.pydata.org/docs/reference/api/pandas.read_sql_query.html

Пример для SQL Сервер:

import pandas as pd

sql = '''
 select *
 from Table
 where Column = ?
'''
df = pd.read_sql(sql, params=[query_param])

Пример для Oracle:

import pandas as pd

sql = '''
 select *
 from table
 where Column = :query_param
'''
df = pd.read_sql(sql, params={'query_param': 'query_value'})
...