python报错原因

curoser = conn.cursor()
sql = "insert into school values(%s,%s,%s,%s)"
curoser.execute(sql, list)
conn.commit()
curoser.close()
conn.close()

img

代码错误提示了有的参数没转成string,要么就是你sql元组的顺序不对,要么元祖数量和类型不匹配

sql语句问题,提示说是有一些字段没有初始化成功,你核对一下字段数和数据库里是不是能对应上

报错翻译过来是说,字符串格式化过程中并非所有参数都能够转换
一般来说是因为参数数量和%s占位符的数量不一致

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    可能出现的报错及原因如下:

    1. TypeError: not all arguments converted during string formatting 这个报错通常是由于sql中的占位符(%s)数量和传入的list长度不匹配。请检查sql语句中占位符的数量是否等于list的长度。

    2. ProgrammingError: syntax error at or near "XXX" 这个报错通常是由于sql语句语法错误引起的,可以通过打印sql语句的方式找出错误,并进行修改。

    3. IntegrityError: duplicate key value violates unique constraint 这个报错通常是由于插入了重复的主键值导致的,需要修改插入的数据或者修改表结构来解决。

    4. OperationalError: FATAL: sorry, too many clients already 这个报错通常是由于连接池中连接数已达到最大值,需要修改连接池设置或者增加数据库连接数来解决。

    5. AttributeError: 'NoneType' object has no attribute 'execute' 这个报错通常是由于cursor对象未初始化或者连接断开导致的,可以通过重新连接数据库或者重新创建cursor对象来解决。

    依赖库信息:使用Python中内置的sqlite3或者第三方库pymysql等进行数据库连接和操作。

    示例代码:

    import sqlite3
    
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    try:
        cursor.execute("INSERT INTO student(name, age) VALUES(?,?)", ('Bob', 20))
        conn.commit()
    except sqlite3.IntegrityError as e:
        print("Error: ", e)
    finally:
        cursor.close()
        conn.close()
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^