如何在executemany调用中处理动态数量的字段
如何在executemany调用中处理动态数量的字段
嘿,我懂你现在的痛点——写死的%s,%s,...串完全没法适配动态变化的字段数量对吧?其实解决方法很简单,咱们可以用和生成字段列表一模一样的思路,动态生成VALUES部分的占位符。
你看,既然fields列表的长度就是你要插入的字段数量,那咱们直接生成对应数量的%s就行:
writecur.executemany( f"""INSERT INTO {self.schema_name}.{self.table_name} ({','.join(fields)}) VALUES ({','.join(['%s'] * len(fields))})""", [rec for rec in batch] )
这里的核心逻辑是','.join(['%s'] * len(fields)):
- 先通过
['%s'] * len(fields)创建一个包含len(fields)个%s元素的列表 - 再用
','.join()把这些%s用逗号连接成字符串,完美匹配字段的数量
这样不管你的表有3个字段还是30个字段,这段代码都能自动适配,再也不用手动去数着加%s了。另外你已经提到生成器返回的每个rec的元素数量和字段数一致,这就确保了占位符和数据能一一对应,不会出错。
备注:内容来源于stack exchange,提问作者da Bich
相关产品推荐
相关产品推荐

