gpt4 book ai didi

r - 使用RSQLite时的R多行语句

转载 作者:行者123 更新时间:2023-12-03 18:28:41 24 4
gpt4 key购买 nike

我有一个需要在sqlite上运行的事务。该事务包括几个查询。如果单独构建(逐行构建),则可以运行,但是需要n次调用dbSendQuery。它使代码变慢了很多。

理想的代码应如下所示,但是多行查询失败:

library("RSQLite")
con <- dbConnect(RSQLite::SQLite(), dbname="test.db")
dbSendQuery(con, paste("CREATE TABLE Variables (Name TEXT PRIMARY KEY, RealValue REAL, IntegerValue INTEGER, BlobValue BLOB, TextValue TEXT)"))
dbSendQuery(con, paste("INSERT INTO Variables (Name) VALUES ('newid');"))
dbSendQuery(con, paste("BEGIN IMMEDIATE TRANSACTION;",
"UPDATE Variables SET TextValue = '0' WHERE Name = 'newid';",
"UPDATE Variables SET RealValue = 0 WHERE Name = 'newid';",
"UPDATE Variables SET IntegerValue = 0 WHERE Name = 'newid';",
"COMMIT;",sep=" "))
a <- dbFetch(dbSendQuery(con, paste("SELECT * FROM _Variables;")))
dbSendQuery(con, paste("COMMIT;"))

最佳答案

请考虑RSQLite方法:dbBegin()dbCommit()(w / dbRollback表示错误)以处理事务。甚至考虑将所有UPDATE语句合并为一个:

library("RSQLite")
con <- dbConnect(RSQLite::SQLite(), dbname="test.db")
dbSendStatement(con, "CREATE TABLE [Variables] ([Name] TEXT PRIMARY KEY, [RealValue] REAL, [IntegerValue] INTEGER, [BlobValue] BLOB, [TextValue] TEXT)")
dbSendStatement(con, "INSERT INTO [Variables] ([Name]) VALUES ('newid')")

dbBegin(con)
tryCatch({
dbSendStatement(con, "UPDATE [Variables] SET TextValue = '0', RealValue = 0, IntegerValue = 0 WHERE [Name] = 'newid'")
}, error=function(e) dbRollback(con))
dbCommit(con)

a <- dbGetQuery(con, "SELECT * FROM [Variables]")


您甚至可以将 UPDATE语句组合为一个查询:

关于r - 使用RSQLite时的R多行语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com