是否有一个「;“执行官”;R和RSQLite的模拟?
问题:是否有一个「;“执行官”;R和RSQLite的模拟?,r,sqlite,R,Sqlite,问题: 有没有一种方法可以使用r将许多行(20k以下)插入SQLite3表 更多工作: 我看过类似的答案,但它们似乎没有说明这一点: 有一个“c命令”,但不是“R” SQLite3帮助本身似乎没有给出前进的方向: Python具有“”使大型插入快速运行。RSQLite或DBI中是否有“R”模拟?有没有其他我应该使用的图书馆 提前感谢。dbWriteTable有一个append参数,允许添加到表中。使用内置的BOD数据框: library(RSQLite) con <-
有没有一种方法可以使用r将许多行(20k以下)插入SQLite3表 更多工作:
我看过类似的答案,但它们似乎没有说明这一点:
提前感谢。
dbWriteTable
有一个append参数,允许添加到表中。使用内置的BOD
数据框:
library(RSQLite)
con <- dbConnect(SQLite())
dbWriteTable(con, "BOD", BOD) # create the table
dbWriteTable(con, "BOD", 2*BOD, append = TRUE) # add some more rows
库(RSQLite)
con在data.frame或tibble中迭代行并在SQLite表中逐个插入每一行是一种正确的方法。使用dbWriteTable
的简单解决方案在表参数化和INSERT
条件中没有提供太多的粒度,这通常是需要的(例如设置主键和外键)
示例,时间序列存储在TIBLE中,包含两列“时间”和“值”
创建表
con为什么不?dbsendpresparedquery
?@joran-帮助文档中没有太多关于准备好的查询的内容。你能给我指一下或者给我一个基本的例子吗?这肯定比准备好的查询更简单。这对完整的表有效吗?整洁的让我来测试一下。(编辑)-你太棒了。谢谢你@G.格罗森迪克。
con <- DBI::dbConnect(RSQLite::SQLite(), db_path)
table_name <- 'my_ts'
com <- as.character(stringr::str_glue("CREATE TABLE IF NOT EXISTS '{table_name}' \
('times' TEXT NOT NULL, 'values' REAL, PRIMARY KEY(times));"))
DBI::dbWithTransaction(con, {
DBI::dbExecute(con, com)
})
tb_times <- as.character(tb[['times']])
tb_values <- as.numeric(tb[['values']])
for (i in seq_along(index(tb))) {
com <- as.character(stringr::str_glue("INSERT OR REPLACE INTO '{table_name}'(times, 'values') \
VALUES('{tb_times[i]}', {tb_values[i]});"))
DBI::dbWithTransaction(con, {
DBI::dbExecute(con, com)
})
}
RSQLite::dbDisconnect(con)