You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

习惯追踪应用添加习惯时报错:sqlite3.Connection对象无add属性

问题分析与解决

核心错误原因

报错AttributeError: 'sqlite3.Connection' object has no attribute 'add'的直接原因:

  • 你在habit.py里把self.database(这是sqlite3.Connection对象)当成带add方法的对象调用,但sqlite3.Connection本身没有这个方法。add是database.py里定义的独立函数,不是连接对象的成员方法。

另外database.py的add函数存在冗余问题:函数已接收db参数,内部却重新调用establish_connection创建新连接,导致传入的连接被忽略,属于不必要的重复操作。

具体修正步骤

1. 修正habit.py中的add_habit方法

先确保habit.py顶部导入database模块:

import database

然后修改add_habit的调用逻辑,直接调用database.add函数:

def add_habit(self):
    if habit_exists(self.database, self.name) is False:
        # 调用database模块的add函数,传入已创建的连接self.database
        database.add(self.database, self.name, self.description, self.duration, self.start_time, self.streak)
        print(f'{self.name} has been added to the database as a {self.duration} habit starting on {self.start_time}\n')
        
    else: 
        print(f'{self.name} already exists in the database\n')

2. 修正database.py中的add函数

删除内部重复创建连接的代码,直接使用传入的db连接:

def add(db, name, description, duration, start_time, streak):
    """Adds a habit to the database

    Args:
        db (sqlite3.connect): _description_
        name (str): _description_
        description (str): _description_
        duration (str): _description_
        start_time (str): _description_
        streak (int): _description_
    """
    # 移除该行重复创建连接的代码:db = establish_connection('main.db')
    cursor = db.cursor()
    cursor.execute('''INSERT INTO habits (name, description, duration, start_time, streak) VALUES (?, ?, ?, ?, ?)''', (name, description, duration, start_time, streak))
    db.commit()

额外说明

  • 复用数据库连接:既然已经在habit类中创建了self.database连接,就应该复用它,避免重复创建连接带来的性能损耗和事务问题。
  • 区分函数与方法:独立函数需通过模块名调用,对象方法才通过实例调用,不要混淆两种调用方式。

内容的提问来源于stack exchange,提问作者B.Copeland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:01:23