PyODBC参数传递问题:如何复用兼容有无参数的插入函数
问题描述
现有以下用于SQL参数化插入的代码:
import pyodbc as pyodbc cnxn = pyodbc.connect(DB_STR) cursor = cnxn.cursor() def insert_table(insert_query, date_para): result = cursor.execute(insert_query, date_para) cnxn.commit()
当SQL语句无需传递参数时,尝试调用insert_table(my_query, '')或省略第二个参数都会报错,希望修改函数使其同时支持带参数和无参数的插入场景。
修改方案
可以通过以下两种方式实现:
方法1:给参数设置默认值并做判断
将date_para的默认值设为None,在函数内部根据参数是否存在来调用execute:
import pyodbc as pyodbc cnxn = pyodbc.connect(DB_STR) cursor = cnxn.cursor() def insert_table(insert_query, date_para=None): if date_para is not None: result = cursor.execute(insert_query, date_para) else: result = cursor.execute(insert_query) cnxn.commit()
调用方式:
- 带参数:
insert_table(insert_query, '2024-05-20') - 无参数:
insert_table(my_query)或insert_table(my_query, None)
方法2:使用可变参数(支持多参数场景)
如果未来可能需要传递多个参数,推荐用可变参数*args,兼容任意数量的参数(包括零个):
import pyodbc as pyodbc cnxn = pyodbc.connect(DB_STR) cursor = cnxn.cursor() def insert_table(insert_query, *args): result = cursor.execute(insert_query, *args) cnxn.commit()
调用方式:
- 无参数:
insert_table(my_query) - 单个参数:
insert_table(insert_query, '2024-05-20') - 多个参数:
insert_table(insert_query, '2024-05-20', 'test_value', 100)
说明
方法1逻辑直观,贴合当前单参数需求;方法2扩展性更强,适合未来可能的多参数场景,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

