学习来源:
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的使用相关推荐

  1. 生信小白学习日记Day7——WGS分析流程(picard)

    2019年6月2日,周日,天气晴,pass 上午.开始学习NGS分析,继BWA比对和SAM文件排序转BAM后的流程. NGS分析 step5 Mark Duplications 参考这篇:GATK使用 ...

  2. 生信识图之 点图进阶-3(MA)

    各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 对于"诈尸式"更新,大Y ...

  3. 生信识图之 点图进阶-6(UMAP)

    各位亲爱的土豪富婆,见字如面. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 春天来啦,又到了--考研计划的时候.大Y老师不是会把咱们公众号的更新陆续同步到知乎上 ...

  4. 生信识图之 点图进阶-4 (PCA下篇)

    各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. 近期有朋友说发现有人抄袭咱们的文章,自标为"原创".对此大Y老师有心理准备,咱们的每一篇文章都是大Y老师仔细 ...

  5. 生信识图 之 点图进阶-1

    各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂. -----以下是日常碎碎念,日理万机的您,可以直接跳到图图图图分割线享用----- 大Y老师做生信分析十多年了,在此期间结识很多 ...

  6. 生信和植物领域最新资讯合集

    宏基因组/微生物组是当今世界科研最热门的研究领域之一,中科院科研人员创立"宏基因组"公众号,入选科研圈评选"2019年度学术媒体优质公众号联合海内外同行共同打造本领域纯干 ...

  7. camunda流程定义表无数据_[Python04] 学习snakemake,三步轻松搭建生信流程!

    随着学习的不断深入,分析的数据越来越多.你会发现,日常生信分析不过是调用一些相同的函数或者包分析不同的数据,换汤不换药. 那么,如何把分析过程流程化,让数据像工厂的流水线一样自动被处理? 最简单的法子 ...

  8. 生信分析和统计作图资源推荐

    宏基因组/微生物组是当今世界科研最热门的研究领域之一,中科院科研人员创立"宏基因组"公众号,入选科研圈评选"2019年度学术媒体优质公众号联合海内外同行共同打造本领域纯干 ...

  9. 送书《R语言数据分析和可视化》 | 这个为生信学习和生信作图打造的开源R教程真香!!!...

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.在线绘图.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞 ...

  10. 当我们谈论生信的时候我们在谈什么

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.高颜值在线绘图和分析.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流 ...

最新文章

  1. JAVA 中BIO,NIO,AIO的理解
  2. leetcode------Word Search
  3. 如何绑定多个action到一个slot
  4. Jessica Kerr:高绩效团队简史
  5. ArcGIS几种数据格式
  6. 「业务架构」商业模式画布
  7. 黎曼猜想 量子计算机,理解黎曼猜想(一)背景
  8. qmoc文件_Qt(2):MOC文件解析
  9. win 7 安装 VMware 14的bug
  10. SECURITY:加密与解密,AIDE入侵检测系统,扫面与抓包
  11. 初识Java+JDK的安装与环境变量的配置+IDEA的安装
  12. eos节点服务器_EOS柚子生态投票的骗局,你以为自己在区块恋革命,其实是在参与CX罢了...
  13. 基于JavaEE的游泳馆管理系统_JSP网站设计_SQLServer数据库设计
  14. BUUWeb刷题记录
  15. 7.8 css 学习
  16. 笔记本wifi热点设置
  17. python - 模块解析
  18. 新手怎么重装系统?只需3步看完小白也会装!
  19. 带记事功能的日历插件fullCalendar
  20. python中烦人的锟斤拷(\xef\xbf\xbd)

热门文章

  1. 卓尼斯ZT-180点评
  2. 【转】搞清楚脚本中这些函数的调用规律
  3. 使用.NET和Jquery打造简单的便签纸
  4. cisco用户隔离配置
  5. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  6. python股票_十分钟学会用Python交易股票
  7. 将json字符串转换成html,根据json字符串生成Html的一种方式
  8. def __init__(self)是什么意思_一文搞懂什么是Python的metaclass
  9. net framework安装有什么影响_踢脚暖比地暖安装简单,升温快,为什么没有普及?这2点影响很大...
  10. python如何输入数据形成列表_将Python字典/列表插入到SQL数据库中最有效的方法是什么?...