如何一次执行多个RSQLite语句或如何转储整个文件?

前端之家收集整理的这篇文章主要介绍了如何一次执行多个RSQLite语句或如何转储整个文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Rsqlite构建sqlite数据库我希望一次发送多个语句 – 这可能吗?

为什么这些不起作用:

sql <- readLines("createtables.sql")
dbSendQuery(con,sql)

……而且……

sql <- paste(readLines("createtables.sql"),collapse="")
dbSendQuery(con,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,birthday DATE ) ;

/* table def: foodtypes */
CREATE TABLE foodtypes (
foodid INTEGER PRIMARY KEY AUTOINCREMENT,`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") )

猜你在找的Sqlite相关文章