Python函数传入可选参数从SQL数据库提取数据的问题求解
Python可选参数函数按需拉取SQL数据的修正方案
原代码问题点
- 函数未设置参数默认值,强制要求传参,不传参调用会直接触发参数缺失报错
- SQL语句拼接存在语法错误:
BaseHoldingID的值和后面的ORDER关键字之间没有空格,执行SQL时会报语法错误 - 函数名调用拼写错误:定义的函数名为
AUMVaR,实际调用时写成了fundVaR、fundVar,大小写和拼写都不匹配 - 空值判断逻辑有隐患:用
if not fundbhID判断的话,若传入合法参数0会被误判为未传参,建议用is None明确判断参数是否被传入 - 冗余代码:
pd.read_sql_query返回结果本身就是DataFrame格式,不需要额外用pd.DataFrame()转换
修正后可运行代码
import pandas as pd # 请提前完成数据库连接conn的初始化,此处省略你原有conn的配置逻辑 def AUMVaR(fundbhID=None): if fundbhID is None: # 未传参时拉取全量数据 sql = """ SELECT * FROM vwExposure_VaR """ fundVaR = pd.read_sql_query(sql, conn) else: # 传参时拉取对应ID数据,使用参数化查询避免SQL注入和字符串拼接语法问题 sql = """ SELECT * FROM vwExposure_VaR WHERE BaseHoldingID = %s ORDER BY ReportingDate ASC """ fundVaR = pd.read_sql_query(sql, conn, params=(fundbhID,)) return fundVaR # 不传参调用,拉取全量记录 full_var_df = AUMVaR() # 传参调用,拉取指定ID对应数据 specific_var_df = AUMVaR(10538)
补充说明
如果你的数据库驱动不支持%s占位符,可以替换为?(适配SQLite、Access等驱动),参数化查询是官方推荐的写法,安全性和稳定性都远高于直接字符串拼接SQL。
内容的提问来源于stack exchange,提问作者Herman L
相关产品推荐
相关产品推荐

