【生信进阶练习1000days】day7-RSQLite的使用
学习来源:
https://cran.r-project.org/web/packages/RSQLite/vignettes/RSQLite.html
文章目录
- 1. 创建一个新的SQLite数据库
- 2. Loading data (加载数据)
- 3. Queries (查询)
- 4. Batched queries
- 5. Multiple parameterised queries
- 6. Satements
- 参考连接
1. 创建一个新的SQLite数据库
我们可以通过函数 dbConnect()
来连接和创建一个新的数据库
mydb <- dbConnect(RSQLite::SQLite(), "my-db.sqlite")
dbDisconnect(mydb)
unlink("my-db.sqlite")
可以使用双引号 ""
来构建一个桌面的临时数据库,或者使用 :memory:
和 file::memory
构建一个内存里的数据库。当我们断开连接,临时数据库就会直接自动删除。
mydb <- dbConnect(RSQLite::SQLite(), "")
dbDisconnect(mydb)
2. Loading data (加载数据)
我们可以使用函数 dbWriteTable():
来将R数据框格式的数据,导入数据框
mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "mtcars", mtcars)
dbWriteTable(mydb, "iris", iris)
dbListTables(mydb)
#> [1] "iris" "mtcars"
3. Queries (查询)
使用 dbGetQuery()
函数执行查询
dbGetQuery(mydb, 'SELECT * FROM mtcars LIMIT 5')
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#> 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#> 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#> 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#> 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
注意:
不要使用paste()
函数来构建用户查询,这样很可能会引起SQL注入攻击
要使用params参数来查询
dbGetQuery(mydb, 'SELECT * FROM iris WHERE "Sepal.Length" < :x', params = list(x = 4.6))
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 4.4 2.9 1.4 0.2 setosa
#> 2 4.3 3.0 1.1 0.1 setosa
#> 3 4.4 3.0 1.3 0.2 setosa
#> 4 4.5 2.3 1.3 0.3 setosa
#> 5 4.4 3.2 1.3 0.2 setosa
这会显著提高数据库的安全性
4. Batched queries
如果我们执行了一个查询,但是查询结果很大,超出了内存范围,不能直接储存于内存中,
此时我们就需要使用 dbSendQuery()
,dbFetch()
, dbClearResults()
函数来批量处理检索结果,从超大的查询结果中选取自己想要的信息后,再确定存储下来。
注:
这属于检索大文件的操作
dbFetch()
默认检索所有可能的行,使用n
参数,可以设置返回的最大行数
rs <- dbSendQuery(mydb, 'SELECT * FROM mtcars')
while (!dbHasCompleted(rs)) {df <- dbFetch(rs, n = 10)print(nrow(df))
}
#> [1] 10
#> [1] 10
#> [1] 10
#> [1] 2
dbClearResult(rs)
dbSendQuery()
可以执行一条查询,但是它不会直接抓取数据库中的数据记录- 使用
dbFetch()
对dbSendQuery()
查询得到的object,进行数据的抓取 - 完成
dbSendQuery()
和dbFetch()
操作后,使用dbClearResult()
来停止抓取数据的操作。
5. Multiple parameterised queries
设置一个参数,进行参数化查询
我们也可以使用 dbBind()
函数,结合 dbSendQuery()
函数以及**dbFetch()
** 函数来完成参数化查询
rs <- dbSendQuery(mydb, 'SELECT * FROM iris WHERE "Sepal.Length" < :x')
dbBind(rs, param = list(x = 4.5))
nrow(dbFetch(rs))
#> [1] 4
dbBind(rs, param = list(x = 4))
nrow(dbFetch(rs))
#> [1] 0
dbClearResult(rs)
设置多个参数,进行参数化查询
rs <- dbSendQuery(mydb, 'SELECT * FROM iris WHERE "Sepal.Length" = :x')
dbBind(rs, param = list(x = seq(4, 4.4, by = 0.1)))
nrow(dbFetch(rs))
#> [1] 4
dbClearResult(rs)
6. Satements
DBI有两个新的函数dbSendStatement()和dbExecute(),它们是dbSendQuery()和dbGetQuery()的对应函数,应用于不返回表结果的SQL语句查询(例如将记录插入表、更新表或设置引擎参数)。如果不是很需要得到返回的查询结果,使用新函数是一种很好的实践。
dbExecute(mydb, 'DELETE FROM iris WHERE "Sepal.Length" < 4')
#> [1] 0
rs <- dbSendStatement(mydb, 'DELETE FROM iris WHERE "Sepal.Length" < :x')
dbBind(rs, param = list(x = 4.5))
dbGetRowsAffected(rs)
#> [1] 4
dbClearResult(rs)
con <- dbConnect(RSQLite::SQLite(), ":memory:")dbWriteTable(con, "cars", head(cars, 3))rs <- dbSendStatement(con,"INSERT INTO cars (speed, dist) VALUES (1, 1), (2, 2), (3, 3)"
)
dbHasCompleted(rs)
dbGetRowsAffected(rs)
dbClearResult(rs)
dbReadTable(con, "cars") # there are now 6 rows# Pass one set of values directly using the param argument:
rs <- dbSendStatement(con,"INSERT INTO cars (speed, dist) VALUES (?, ?)",param = list(4L, 5L)
)
dbClearResult(rs)# Pass multiple sets of values using dbBind():
rs <- dbSendStatement(con,"INSERT INTO cars (speed, dist) VALUES (?, ?)"
)
dbBind(rs, list(5:6, 6:7))
dbBind(rs, list(7L, 8L))
dbClearResult(rs)
dbReadTable(con, "cars") # there are now 10 rowsdbDisconnect(con)
参考连接
- https://www.runoob.com/sqlite/sqlite-drop-table.html
- https://www.runoob.com/sqlite/sqlite-drop-table.html
- https://cran.r-project.org/web/packages/RSQLite/vignettes/RSQLite.html
【生信进阶练习1000days】day7-RSQLite的使用相关推荐
- 生信小白学习日记Day7——WGS分析流程(picard)
2019年6月2日,周日,天气晴,pass 上午.开始学习NGS分析,继BWA比对和SAM文件排序转BAM后的流程. NGS分析 step5 Mark Duplications 参考这篇:GATK使用 ...
- 生信识图之 点图进阶-3(MA)
各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 对于"诈尸式"更新,大Y ...
- 生信识图之 点图进阶-6(UMAP)
各位亲爱的土豪富婆,见字如面. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 春天来啦,又到了--考研计划的时候.大Y老师不是会把咱们公众号的更新陆续同步到知乎上 ...
- 生信识图之 点图进阶-4 (PCA下篇)
各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. 近期有朋友说发现有人抄袭咱们的文章,自标为"原创".对此大Y老师有心理准备,咱们的每一篇文章都是大Y老师仔细 ...
- 生信识图 之 点图进阶-1
各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 大Y老师做生信分析十多年了,在此期间结识很多 ...
- 生信和植物领域最新资讯合集
宏基因组/微生物组是当今世界科研最热门的研究领域之一,中科院科研人员创立"宏基因组"公众号,入选科研圈评选"2019年度学术媒体优质公众号联合海内外同行共同打造本领域纯干 ...
- camunda流程定义表无数据_[Python04] 学习snakemake,三步轻松搭建生信流程!
随着学习的不断深入,分析的数据越来越多.你会发现,日常生信分析不过是调用一些相同的函数或者包分析不同的数据,换汤不换药. 那么,如何把分析过程流程化,让数据像工厂的流水线一样自动被处理? 最简单的法子 ...
- 生信分析和统计作图资源推荐
宏基因组/微生物组是当今世界科研最热门的研究领域之一,中科院科研人员创立"宏基因组"公众号,入选科研圈评选"2019年度学术媒体优质公众号联合海内外同行共同打造本领域纯干 ...
- 送书《R语言数据分析和可视化》 | 这个为生信学习和生信作图打造的开源R教程真香!!!...
生物信息学习的正确姿势 NGS系列文章包括NGS基础.在线绘图.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞 ...
- 当我们谈论生信的时候我们在谈什么
生物信息学习的正确姿势 NGS系列文章包括NGS基础.高颜值在线绘图和分析.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流 ...
最新文章
- JAVA 中BIO,NIO,AIO的理解
- leetcode------Word Search
- 如何绑定多个action到一个slot
- Jessica Kerr:高绩效团队简史
- ArcGIS几种数据格式
- 「业务架构」商业模式画布
- 黎曼猜想 量子计算机,理解黎曼猜想(一)背景
- qmoc文件_Qt(2):MOC文件解析
- win 7 安装 VMware 14的bug
- SECURITY:加密与解密,AIDE入侵检测系统,扫面与抓包
- 初识Java+JDK的安装与环境变量的配置+IDEA的安装
- eos节点服务器_EOS柚子生态投票的骗局,你以为自己在区块恋革命,其实是在参与CX罢了...
- 基于JavaEE的游泳馆管理系统_JSP网站设计_SQLServer数据库设计
- BUUWeb刷题记录
- 7.8 css 学习
- 笔记本wifi热点设置
- python - 模块解析
- 新手怎么重装系统?只需3步看完小白也会装!
- 带记事功能的日历插件fullCalendar
- python中烦人的锟斤拷(\xef\xbf\xbd)
热门文章
- 卓尼斯ZT-180点评
- 【转】搞清楚脚本中这些函数的调用规律
- 使用.NET和Jquery打造简单的便签纸
- cisco用户隔离配置
- wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
- python股票_十分钟学会用Python交易股票
- 将json字符串转换成html,根据json字符串生成Html的一种方式
- def __init__(self)是什么意思_一文搞懂什么是Python的metaclass
- net framework安装有什么影响_踢脚暖比地暖安装简单,升温快,为什么没有普及?这2点影响很大...
- python如何输入数据形成列表_将Python字典/列表插入到SQL数据库中最有效的方法是什么?...