curoser = conn.cursor()
sql = "insert into school values(%s,%s,%s,%s)"
curoser.execute(sql, list)
conn.commit()
curoser.close()
conn.close()
代码错误提示了有的参数没转成string,要么就是你sql元组的顺序不对,要么元祖数量和类型不匹配
sql语句问题,提示说是有一些字段没有初始化成功,你核对一下字段数和数据库里是不是能对应上
报错翻译过来是说,字符串格式化过程中并非所有参数都能够转换
一般来说是因为参数数量和%s占位符的数量不一致
可能出现的报错及原因如下:
TypeError: not all arguments converted during string formatting 这个报错通常是由于sql中的占位符(%s)数量和传入的list长度不匹配。请检查sql语句中占位符的数量是否等于list的长度。
ProgrammingError: syntax error at or near "XXX" 这个报错通常是由于sql语句语法错误引起的,可以通过打印sql语句的方式找出错误,并进行修改。
IntegrityError: duplicate key value violates unique constraint 这个报错通常是由于插入了重复的主键值导致的,需要修改插入的数据或者修改表结构来解决。
OperationalError: FATAL: sorry, too many clients already 这个报错通常是由于连接池中连接数已达到最大值,需要修改连接池设置或者增加数据库连接数来解决。
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()