如何通过Python更新SQL查询中的@pdate参数?
可以通过Python更新SQL查询中的参数
完全可以实现无需修改SQL文件,直接通过Python传入参数的需求,推荐使用参数绑定的方式(安全且避免SQL注入风险),具体步骤如下:
1. 调整SQL查询文件
将原SQL中声明并赋值@pdate的两行代码删除,保留@pdate作为参数占位符即可,修改后的SQL内容如下:
set nocount on; select cast(L.Date as datetime) as Date , Amount , AccountNumber , Property , County , ZipCode , Price , Owner from Account.Detail L inner join Owner.Detail M on L.Date = M.Date and L.Number = M.Number inner join Purchase.Detail P on L.Date = P.Date and L.Purchase.Number = P.Purchase.Number where L.Date = @pdate and Purchase.Number not in ('CL1', 'CL2') and Amount > 0
2. 修改Python代码传递参数
利用pandas.read_sql的params参数(或pyodbc的参数绑定机制)传入@pdate的值,修改后的Python代码如下:
import pyodbc import pandas as pd # 补充导入pandas,原代码缺失 server = 'my_server_name' database = 'my_database_name' connection = pyodbc.connect(Trusted_Connection="yes", DRIVER="{SQL Server}", SERVER=server, DATABASE=database) # 读取SQL查询语句 query = open('Pathway_for_SQL_Query.sql').read() # 指定要传入的参数值 target_date = '2023-12-31' # 这里可以根据需求动态修改日期 # 传入参数并执行查询 data = pd.read_sql(query, connection, params={'pdate': target_date}) connection.close() # 后续可以处理data数据 print(data.head())
额外说明
- 参数绑定方式会自动处理数据类型转换(比如将字符串日期转为SQL的datetime类型),无需手动处理格式
- 绝对不推荐使用字符串拼接的方式替换SQL中的参数,这种做法存在严重的SQL注入风险
内容的提问来源于stack exchange,提问作者Yuuuu
相关产品推荐
相关产品推荐

