写入数据库出问题

控制台报错:

08:07:09.293 [http-bio-8080-exec-2] ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1]


查阅许多博客得出了自己的理解,请大家指教:

由于存在隐藏表单进行回显,导致提交时value不是Null,而是"",而我设置的主键生成策略是uuid,所以无法赋值导致错误,解决方法是隐藏表单外面添加了if判断!


将数据写入数据库是Python中常见的操作,通常涉及读取数据源、连接数据库以及执行写入操作。以下是一个完整的流程,涵盖从读取Excel文件到将数据写入MySQL数据库的步骤。 ### 读取Excel中的数据 使用 `xlrd` 库可以读取 `.xls` 格的 Excel 文件[^1]。以下是一个示例代码: ```python import xlrd path = r'联系人.xlsx' wb = xlrd.open_workbook(path) ws = wb.sheet_by_index(0) intent = [ws.row_values(i) for i in range(ws.nrows)] print(intent) ``` 这段代码会将 Excel 文件的第一张工作表的所有数据读取为一个二维列表。 ### 连接数据库 使用 `pymysql` 可以连接 MySQL 数据库[^2]。以下是一个连接数据库的示例: ```python import pymysql db = pymysql.connect( host="localhost", user="root", passwd="123456", port=3306, charset='utf8' ) cursor = db.cursor() ``` 连接成功后,可以通过 `cursor` 对象执行 SQL 操作。 ### 写入数据库 使用 `SQLAlchemy` 的 `create_engine` 方法可以更方便地执行批量写入操作[^3]。以下是一个使用 `pandas` 和 `SQLAlchemy` 的示例: ```python from sqlalchemy import create_engine import pandas as pd # 创建数据库连接引擎 engine = create_engine("mysql://root:123456@localhost:3306/mydatabase?charset=utf8") # 将数据转换为DataFrame df = pd.DataFrame(intent[1:], columns=intent[0]) # 假设第一行为列名 # 写入数据库 df.to_sql(name='mytable', con=engine, if_exists='append', index=False) ``` 上述代码将 Excel 数据转换为 `pandas.DataFrame`,然后使用 `to_sql` 方法将数据写入 MySQL 数据库表中。 ### 完整代码整合 将上述步骤整合,形成一个完整的数据写入流程: ```python import xlrd from sqlalchemy import create_engine import pandas as pd # 读取Excel数据 path = r'联系人.xlsx' wb = xlrd.open_workbook(path) ws = wb.sheet_by_index(0) intent = [ws.row_values(i) for i in range(ws.nrows)] # 创建数据库引擎 engine = create_engine("mysql://root:123456@localhost:3306/mydatabase?charset=utf8") # 将数据转换为DataFrame df = pd.DataFrame(intent[1:], columns=intent[0]) # 假设第一行为列名 # 写入数据库 df.to_sql(name='mytable', con=engine, if_exists='append', index=False) ``` ### 注意事项 - 确保 Excel 文件路径正确。 - 数据库连接信息(如用户名、密码、主机地址、端口和数据库名)需要根据实际情况修改。 - 表名和列名需要与数据库中的结构匹配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值