sql-server - 使用带有参数化查询的 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 函数,在这里我可以将上面示例中的日期(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 的参数化功能与 pandaspd.read_sql_query
或pd.read_sql
?
解决方案
您可以通过与设置参数read_sql_query
相同的方式进行参数化:
https ://pandas.pydata.org/docs/reference/api/pandas.read_sql_query.htmlcursor.execute
params
SQL Server 示例:
import pandas as pd
sql = '''
select *
from Table
where Column = ?
'''
df = pd.read_sql(sql, params=[query_param])
甲骨文的例子:
import pandas as pd
sql = '''
select *
from table
where Column = :query_param
'''
df = pd.read_sql(sql, params={'query_param': 'query_value'})
推荐阅读
- dataframe - awk 在每个单元格中以几何顺序乘整数
- react-native - 如何使用 Victory 原生实现实用的烛台图?
- laravel-8 - 找不到混合文件:/assets/css/animate.css
- pandas - 如何对熊猫数据框中的范围值进行排序?
- objectbox - 是否可以通过反向链接关系查询?
- firebase - 如果我要访问的字段不在Firebase中,如何处理
- python - 尝试使用 azure python sdk 在活动目录中列出用户时出错
- javascript - react-vtk-js/ vtk.js/ React.js
- .net-core - Azure Devops - 托管池 - ubuntu latest - 如何获得 ubuntu-latest 以拥有最新的 Visual Studio 构建工具(2022 年预览版)?
- binary-tree - 对于二叉树来说,单词以小写字母还是大写字母开头有关系吗?