如何提取嵌套列表并保存至数据库?解包操作报错求解
解决数据库保存时的解包错误
错误原因
你在f-string中使用{*record}直接解包序列是Python语法不允许的,这就是Unpack operation not allowed in this context报错的根源。
修正方案
根据你的set_item方法参数要求,选择以下两种方式之一:
1. 若set_item需要逗号分隔的字符串值
如果第三个参数要求是类似'1', '1249708', '675', '24.05.2022'格式的字符串,需要将record元素转为带引号的字符串再拼接:
def save_data_to_database(self): parsed_records = self.parse_sheet_data() for record in parsed_records: # 为每个元素添加单引号,再用逗号连接 formatted_values = ", ".join(f"'{item}'" for item in record) self.db.set_item( "sheet", "id, number_of_order, cost, delivery_time", formatted_values )
2. 若set_item支持可变参数传递
如果set_item的第三个参数设计为接受多个位置参数(即方法定义为set_item(table, fields, *values)),直接在参数位置解包record即可:
def save_data_to_database(self): parsed_records = self.parse_sheet_data() for record in parsed_records: self.db.set_item( "sheet", "id, number_of_order, cost, delivery_time", *record # 直接解包为多个参数 )
更安全的参数化查询推荐
为避免SQL注入风险,优先使用数据库驱动支持的参数化查询方式(以常见SQLite为例):
def save_data_to_database(self): parsed_records = self.parse_sheet_data() # 构造参数化插入语句 insert_query = """ INSERT INTO sheet (id, number_of_order, cost, delivery_time) VALUES (?, ?, ?, ?) """ for record in parsed_records: self.db.execute(insert_query, record) # 提交事务 self.db.commit()
内容的提问来源于stack exchange,提问作者Nero
相关产品推荐
相关产品推荐

