创建一个 SQLite 数据库
首先,我们学习如何创建一个SQLite 数据库。如果想要在data/example.sqlite 这个
路径中创建一个示例数据库,就必须确保该路径存在。如果该路径不存在,就必须先创建路径:
if (!dir.exists("data")) dir.create("data")
现在,路径 data/ 是可访问的了。接下来,我们载入 RSQLite 扩展包,并提供一个
数据库驱动(SQLite( ))和数据库文件(data/example.sqlite)来建立连接。尽
管目标文件尚不存在,数据库驱动会创建一个空文件,即一个空的 SQLite 数据库:
library(RSQLite)
##装载相关扩展包:DBI
con <- dbConnect(SQLite( ), "data/example.sqlite")
数据库连接 con 是介于用户和系统中间的一层。我们可以创建一个连接,并且连接到
关系型数据库,并通过这个连接实现查询、抽取及更新数据。后续的操作中一直使用该连
接,直到连接被关闭。在一个典型的关系型数据库中,我们可以创建一个新表,该表的名
11.1 操作关系型数据库 321
称、列的名称和数据类型都是事先确定的,并且可以在表中增加行记录,也可以更新现有
记录。关系型数据中的一张表看起来非常像 R 里的数据框。
现在,我们将创建一个简单的数据框,并将它作为一张表插入到数据库中。
example1 <- data.frame(
id=1:5,
type = c("A", "A", "B", "B", "C"),
score = c(8, 9, 8, 10, 9),
stringsAsFactors = FALSE)
example1
## id type score
## 1 1 A 8
## 2 2 A 9
## 3 3 B 8
## 4 4 B 10
## 5 5 C 9
现在,数据框已经准备好了,然后调用 dbWriteTable( ) 将其写入数据库,作为库
中的一张表:
dbWriteTable(con, "example1", example1)
## [1] TRUE
在 上 面 的代 码 中 , 我 们 也 可 以 使 用 其 他 表 名 来 存 储 同 样 的 数 据 。 最 后 ,
用 dbDisconnect( ) 断开数据库连接,这样 con 便不可用了。
dbDisconnect(con)
## [1] TRUE
1.向一个数据库写入多张表格
一个 SQLite 数据库是一个表的集合。因此,我们可以在数据库中存储多张表。
这次,我们将 ggplot2 中的 diamonds 数据集和 flights 中的 nycflights13 数
据集作为两张表格写入到一个数据库中。如果你还没有安装这两个包,请运行下列代码:
install.packages(c("ggplot2", "nycflights13"))
安装好两个扩展包之后,就可以调用 data( ) 来载入所需数据框:
data("diamonds", package = "ggplot2")
data("flights", package = "nycflights13")
我们重复之前的操作,但 dbWriteTable( ) 却报错了:
con <- dbConnect(SQLite( ), "data/datasets.sqlite")
dbWriteTable(con, "diamonds", diamonds, row.names=FALSE)
## Error in (function (classes, fdef, mtable) : unable to find an inherited
method for function 'dbWriteTable' for signature '"SQLiteConnection",
"character", "tbl_df"'
dbWriteTable(con, "flights", flights, row.names=FALSE)
## Error in (function (classes, fdef, mtable) : unable to find an inherited
method for function 'dbWriteTable' for signature '"SQLiteConnection",
"character", "tbl_df"'
dbDisconnect(con)
## [1] TRUE
此时,检查一下这两个变量的类,可能会有所帮助:
class(diamonds)
## [1] "tbl_df" "tbl" "data.frame"
class(flights)
## [1] "tbl_df" "tbl" "data.frame"
注意,diamonds 和 flights 不仅仅是一般的 data.frame 类型,而是更复杂的数
据结构。要将它们写入数据库,需要用 as.data.frame( ) 将其转化成普通的数据框对象。
con <- dbConnect(SQLite( ), "data/datasets.sqlite")
dbWriteTable(con, "diamonds", as.data.frame(diamonds), row.names = FALSE)
## [1] TRUE
dbWriteTable(con, "flights", as.data.frame(flights), row.names = FALSE)
## [1] TRUE
dbDisconnect(con)
## [1] TRUE
现在,数据库中就有这两张表了。
2.向表中追加数据
在本节的开头我们提到,向数据库的表中追加记录是非常容易的。这里有一个简单的
例子,首先生成几个数据块,然后将它们依次追加到数据库的表中:
con <- dbConnect(SQLite( ), "data/example2.sqlite")
chunk_size <- 10
id <- 0
for(i in 1:6) {
chunk <- data.frame(id = ((i-1L) * chunk_size):(i * chunk_size-1L),
type = LETTERS[[i]],
score = rbinom(chunk_size, 10, (10-i)/10),
stringsAsFactors = FALSE)
dbWriteTable(con, "products", chunk,
append = i > 1, row.names = FALSE)
}
dbDisconnect(con)
## [1] TRUE
注意,每次代码块都生成了一个数据框,其中包含一些确定数据和一些随机数,我们
将这些数据记录追加到一个名为 products 的表中。这个例子与之前例子的不同之处在
于,当调用 dbWriteTable( ) 时,在第 1 次循环中令参数 append = FALSE,以便
在数据库中创建表格,而后面的每次循环中要令 append = TRUE 来扩展已有的表格。
创建一个 SQLite 数据库的更多相关文章
- Android下创建一个SQLite数据库
数据库:SQLite(轻量级,嵌入式的数据库) 大量的相似结构的数据的储存,快速的查询.特殊的文件(按照一定的格式生成) 数据库的创建 创建文件 1.声明文件对象,文件是不会被创建出来的. File ...
- [android] android下创建一个sqlite数据库
Sqlite数据库是开源的c语言写的数据库,android和iphone都使用的这个,首先需要创建数据库,然后创建表和字段,android提供了一个api叫SQLiteOpenHelper数据库的打开 ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- 在相同的主机上创建一个duplicate数据库
在相同的主机上创建一个duplicate数据库 source db:dbtest auxiliary db:dupdb duplicate database会自动分配一个新的DBID要确保auxili ...
- 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程
背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...
- [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》
[ASP.NET MVC2 系列] [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序> ...
- 如何创建一个 PostgreSQL 数据库?
PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠久,开源的关系数据库.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代 ...
- Android(java)学习笔记192:SQLite数据库(表)的创建 以及 SQLite数据库的升级
一.数据库的创建 1.文件的创建 //引用,如果文件不存在是不会创建的 File file = new File("haha.txt"): //输出流写数据 ...
- iOS中 用FMDB封装一个SQLite数据库
建立一个单例: DataBaseHandle.h #import <Foundation/Foundation.h> @class PersonModel; @class FMDataba ...
随机推荐
- 【Android】安卓中常用的图片加载方法
一.通过相机选图片: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...
- 三进制状态压缩DP(旅行商问题TSP)HDU3001
http://acm.hdu.edu.cn/showproblem.php?pid=3001 Travelling Time Limit: 6000/3000 MS (Java/Others) ...
- Animate CC 2017
一.Animate CC 2017 下载及安装 http://www.ddooo.com/softdown/86853.htm
- 170623、springboot编程之JdbcTemplate操作数据库
使用JdbcTemplate操作mysql数据库! 1.在pom中引入jpa包 <dependency> <groupId>org.springframework.boot&l ...
- Romantic---hdu2669(扩展欧几里德模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2669 详解:扩展欧几里德 #include <iostream> #include < ...
- django如何防止csrf(跨站请求伪造)
什么是CSRF 下面这张图片说明了CSRF的攻击原理: Django中如何防范CSRF Django使用专门的中间件(CsrfMiddleware)来进行CSRF防护.具体的原理如下: 1.它修改当前 ...
- CF734F Anton and School 构造+数论
正解:构造 解题报告: 先放下传送门QwQ 这题首先要知道一个结论:(x&y)+(x|y)=x+y 还是能理解的趴? 所以我们把bi+ci就能得到∑a+n*a[i] 然后我们就能成功求出∑a ...
- 前端 html head meta
META(Metadata information) 提供有页面的元信息 例如:页面编码.刷新.跳转.针对搜索引擎和更新频道的描述和关键词 1.另外一种编码写法 <meta http-equiv ...
- log4j2动态修改日志级别及拓展性使用
一.供参考的完整日志配置 <?xml version="1.0" encoding="UTF-8"?> <!-- 配置LoggerConfig ...
- Spring—spring概述
Spring框架的特点? 1:轻量级,一站式开发 2:易用,追求代码的最佳实现 3:Spring的内容: a:Ioc容器 b:AOP实现 c:数据访问支持(ORM框架/声明事务[Transaction ...