作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
使用 RSQLite 构建 SQLite 数据库我想一次发送多个语句 - 这可能吗?
为什么这些不起作用:
sql <- readLines("createtables.sql")
dbSendQuery(con,sql)
...和...
sql <- paste(readLines("createtables.sql"),collapse="")
dbSendQuery(con,sql)
...和...
sql <- paste(readLines("createtables.sql"),collapse="\n")
dbSendQuery(con,sql)
虽然这些可以:
sql <- "CREATE TABLE birthdays (
nameid INTEGER PRIMARY KEY AUTOINCREMENT ,
firstname VARCHAR(100) NOT NULL ,
lastname VARCHAR(100) NOT NULL ,
birthday DATE ) ; "
dbSendQuery(con,sql)
sql <- "/* table def: foodtypes */
CREATE TABLE foodtypes (
foodid INTEGER PRIMARY KEY AUTOINCREMENT ,
foodname VARCHAR(100) NOT NULL,
healthy INTEGER,
`kcal/100g` float );"
dbSendQuery(con,sql)
createtables.sql的内容是:
/* table def: birthdays */
CREATE TABLE birthdays (
nameid INTEGER PRIMARY KEY AUTOINCREMENT ,
firstname VARCHAR(100) NOT NULL ,
lastname VARCHAR(100) NOT NULL ,
birthday DATE ) ;
/* table def: foodtypes */
CREATE TABLE foodtypes (
foodid INTEGER PRIMARY KEY AUTOINCREMENT ,
foodname VARCHAR(100) NOT NULL,
healthy INTEGER,
`kcal/100g` float );
最佳答案
因为他们似乎没有办法说服 RSQLite 函数一次执行多个语句,所以我写了两个函数来解决这个问题:
(1) sqlFromFile()
读取 SQL 文件并转换文本,使每个语句恰好占一行。
(2) dbSendQueries()
类似于 RSQLite 提供的 dbSendQuery()
,但将查询函数应用于查询的每一行(向量的每个元素)提供文本以便可以运行一大堆语句。
# read in sql-statements and preformat them
sqlFromFile <- function(file){
require(stringr)
sql <- readLines(file)
sql <- unlist(str_split(paste(sql,collapse=" "),";"))
sql <- sql[grep("^ *$", sql, invert=T)]
sql
}
# apply query function to each element
dbSendQueries <- function(con,sql){
dummyfunction <- function(sql,con){
dbSendQuery(con,sql)
}
lapply(sql, dummyfunction, con)
}
# solution for example in question
dbSendQueries( con, sqlFromFile("createtables.sql") )
关于r - 如何一次执行多个 RSQLite 语句或如何转储整个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914283/
我正在为我的应用程序使用 Tank-Auth。我唯一的问题是激活和重置帐户密码。 用于登录、注册、注销;我对这些代码没有问题; $route['login'] = "/auth/login"; $ro
我是一名优秀的程序员,十分优秀!