如何一次执行多个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") ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |