加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 18:57:15 所属栏目:百科 来源:网络整理
导读:使用RSQLite构建SQLite数据库我希望一次发送多个语句 – 这可能吗? 为什么这些不起作用: sql - readLines("createtables.sql")dbSendQuery(con,sql) ……而且…… sql - paste(readLines("createtables.sql"),collapse="")dbSendQuery(con,collapse="n")d
使用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") )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读