如何在类构造函数中加入EventAgeId且插入时无需提供
解决方案
1. 修改构造函数,兼容自增ID的可选性
给EventAgeId参数设置默认值None,这样创建实例时无需传入该字段,同时保留后续赋值的能力:
class EventAges: def __init__(self, EventAgeName, EventAgeStart, EventAgeEnd, EventAgeId=None): self.EventAgeId = EventAgeId self.EventAgeName = EventAgeName self.EventAgeStart = EventAgeStart self.EventAgeEnd = EventAgeEnd
2. 修正插入方法的SQL逻辑
原代码的SQL语句存在字段数与占位符不匹配的问题,而且自增字段不需要手动插入,直接让数据库自动生成即可,插入后把生成的ID赋值给实例:
def add_event_ages(self, event_ages): # 自增字段EventAgeId无需在INSERT中指定,数据库会自动生成 query = '''INSERT INTO EventAges (EventAgeName, EventAgeStart, EventAgeEnd) VALUES (?, ?, ?)''' values = (event_ages.EventAgeName, event_ages.EventAgeStart, event_ages.EventAgeEnd) self.cursor.execute(query, values) self.connection.commit() # 将数据库生成的自增ID赋值给实例的EventAgeId属性 event_ages.EventAgeId = self.cursor.lastrowid return event_ages.EventAgeId
逻辑说明
- 构造函数的
EventAgeId=None设计,既满足插入时无需传参的需求,也支持从数据库查询数据后(带ID)实例化对象的场景。 - 插入完成后通过
lastrowid获取数据库生成的自增ID并赋值给实例,后续使用该实例时就能直接获取EventAgeId,解决查询时的字段缺失问题。
内容的提问来源于stack exchange,提问作者Adi
相关产品推荐
相关产品推荐

