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

Python sqlite3插入行函数开发遇TypeError报错求助

问题解决步骤

1. 修复insert方法的调用参数错误

报错直接原因是调用database.insert(2022, -17.89)时,把年份和海平面值直接传给了需要SQL语句的query参数。insert方法的第一个参数必须是插入数据的SQL模板字符串,第二个参数是包含数据的元组。

正确调用方式:

database.insert("INSERT INTO e (YEAR, SEA_LEVEL) VALUES (?, ?)", (2022, -17.89))

2. 修复类方法的定义缺陷

你的database类存在多个语法和逻辑问题,需调整如下:

  • 类方法需添加self参数绑定实例,否则无法访问类内的连接和游标
  • 数据库连接路径要和之前使用的z.db保持一致,避免创建新的空数据库
  • insert方法里的sqliteConnection未定义,需用当前连接对象提交事务
  • 建表时需提交操作,且建议用IF NOT EXISTS避免重复建表报错

修改后的类代码:

class database:
    def __init__(self):
        # 与之前的数据库路径保持一致
        self.conn = sql.connect(r"C:\Users\slaye\OneDrive\Desktop\sqlite\db\z.db")
        self.cur = self.conn.cursor()

    def create_table(self):
        n = """CREATE TABLE IF NOT EXISTS e( 
        YEAR INTEGER PRIMARY KEY,
        SEA_LEVEL REAL NOT NULL)  -- 改为REAL类型适配浮点数
        ;"""
        self.cur.execute(n)
        self.conn.commit()
        print("table created")

    def insert(self, query, tup):
        self.cur.execute(query, tup)
        self.conn.commit()

3. 修复字段类型不匹配问题

原建表语句中SEA_LEVEL定义为INTEGER,但你要插入的是浮点数-17.89,会丢失精度,改为REAL类型才能正确存储小数。

4. 正确使用流程示例

# 初始化数据库实例
db = database()
# 创建表(若不存在)
db.create_table()
# 插入数据
db.insert("INSERT INTO e (YEAR, SEA_LEVEL) VALUES (?, ?)", (2022, -17.89))

额外优化(可选)

可以给insert方法封装成更易用的形式,无需每次手写SQL:

def insert_sea_level(self, year, sea_level):
    query = "INSERT INTO e (YEAR, SEA_LEVEL) VALUES (?, ?)"
    self.cur.execute(query, (year, sea_level))
    self.conn.commit()

调用时直接使用:db.insert_sea_level(2022, -17.89)

内容的提问来源于stack exchange,提问作者Bijan Khair Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:55:20