使用R循环向MySQL插入数据无新增记录问题求助
解决R中执行MySQL插入语句无记录的问题
可能的原因及解决办法
事务未提交
RMySQL默认不会自动提交事务,哪怕dbExecute执行成功,数据也不会写入数据库。你可以在执行插入后手动提交:dbExecute(connection, payout_history) dbCommit(connection)或者在建立连接时直接开启自动提交:
connection <- dbConnect(RMySQL::MySQL(), dbname = "xxx", host= "xxx", port = xxx, user = "xxx", password = "xxx", autoCommit = TRUE)手动拼接SQL的隐患
用paste0拼接SQL容易出现变量类型错误(比如数字类型的amount被加了单引号)、空值导致的语法错误,甚至SQL注入风险。建议改用参数化查询,通过dbExecute的param参数传参:# 假设循环中当前行的变量为id, order_id, amount, invoice_id query <- "INSERT INTO `payout_history` (`uuid`, `trip_id`, `delivery_order_id`, `amount`, `payout_type_id`, `payout_invoice_id`) VALUES (uuid(), ?, ?, ?, 7, ?)" dbExecute(connection, query, params = list(id, order_id, amount, head(payout_invoice$id,1)))这种方式会自动处理数据类型和引号,避免拼接错误。
检查生成的SQL语句
执行前先打印payout_history,对比和你在MySQL管理器中运行的语句是否完全一致:print(payout_history)如果存在语法错误,
dbExecute可能不会抛出明显报错,但会返回0行受影响,此时就能快速定位问题。循环变量赋值问题
确保循环中的id、order_id、amount等变量在每次循环时都正确赋值,没有出现空值或不符合数据库字段类型的情况。
内容的提问来源于stack exchange,提问作者Jorge Hernández
相关产品推荐
相关产品推荐

