Sql server 使用pyodbc和参数化查询将数据库读入数据帧
我正在使用pyodbc从SQL Server获取数据,使用的脚本如下所示:Sql server 使用pyodbc和参数化查询将数据库读入数据帧,sql-server,pandas,pyodbc,Sql Server,Pandas,Pyodbc,我正在使用pyodbc从SQL Server获取数据,使用的脚本如下所示: 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函数,在这里我可以将上面
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)更改为函数变量
我发现pyodbc提供了,但都在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
必须是普通字符串,但是可以将pyodbc的参数化功能与pandas的pd.read\u sql\u query
或pd.read\u sql
一起使用吗?您可以用与光标相同的方式参数化read\u sql\u query
。通过设置参数执行:
SQL Server示例:
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'})
这在SQL server上作为数据库驱动程序工作,现在我的数据库驱动程序更改为Microsoft ODBC for Oracle。您知道如何在这种情况下进行参数化吗?显然,在查询中使用“?”并在pd中添加参数。在这种情况下,read_sql(params)不起作用?在这种情况下是一个日期。谢谢正如您所发现的,查询中的参数化通常是特定于数据库的,我对Oracle不是很熟悉,但似乎您需要在查询中的参数名称前面加一个冒号,例如“:param1”,然后您可能需要将param
参数设置为使用相同名称(不带冒号)和值的字典。这里有一个例子:用例子更新答案。非常感谢!我发现这个问题的答案是将python日期时间作为参数传递。