首先,我们学习如何创建一个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 数据库的更多相关文章

  1. Android下创建一个SQLite数据库

    数据库:SQLite(轻量级,嵌入式的数据库) 大量的相似结构的数据的储存,快速的查询.特殊的文件(按照一定的格式生成) 数据库的创建 创建文件 1.声明文件对象,文件是不会被创建出来的. File ...

  2. [android] android下创建一个sqlite数据库

    Sqlite数据库是开源的c语言写的数据库,android和iphone都使用的这个,首先需要创建数据库,然后创建表和字段,android提供了一个api叫SQLiteOpenHelper数据库的打开 ...

  3. android 一个SQLite数据库多个数据表的基本使用框架 (带demo)

    android 一个SQLite数据库多个数据表(带demo) 前言        demo演示        一.搭建        二.建立实体类        三.建立数据库操作类        ...

  4. 在相同的主机上创建一个duplicate数据库

    在相同的主机上创建一个duplicate数据库 source db:dbtest auxiliary db:dupdb duplicate database会自动分配一个新的DBID要确保auxili ...

  5. 记一次oracle创建一个新数据库,并导入正式环境数据库备份的dmp包过程

    背景:正式环境oracle数据库定时用exp备份一个dmp包,现在打算在一台机器上创建一个新数据库,并导入这个dmp包. 1.创建数据库 开始 -> 所有程序 -> Oracle -> ...

  6. [ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

    [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>       ...

  7. 如何创建一个 PostgreSQL 数据库?

    PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠久,开源的关系数据库.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代 ...

  8. Android(java)学习笔记192:SQLite数据库(表)的创建 以及 SQLite数据库的升级

    一.数据库的创建 1.文件的创建      //引用,如果文件不存在是不会创建的   File  file = new File("haha.txt"):     //输出流写数据 ...

  9. iOS中 用FMDB封装一个SQLite数据库

    建立一个单例: DataBaseHandle.h #import <Foundation/Foundation.h> @class PersonModel; @class FMDataba ...

随机推荐

  1. iOS 单例用法

    单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...

  2. Python 自学积累(二)

    1. onfigParser 模块用于操作配置文件 注:Parser汉译为“解析”之意. 配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数( ...

  3. SQL中distinct的用法(转载)

    1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 ...

  4. mysql客户端不能插入中文字符

    问题:输入中文报错:Incorrect string value 步骤: 1.查看MySQL编码设置 show variables like '%character%'; 2.重新设置编码(注意:ut ...

  5. 【JavaScript算法】---希尔排序

    一.什么是希尔排序 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本.   思路:      希尔排序是把记录按下标的一定增量分组,对 ...

  6. django haystack

    # coding=utf-8 from haystack import indexes from yw_asset.models import * class AssetIndex(indexes.S ...

  7. mysql 数据操作 单表查询 使用正则表达式查询

    SELECT * FROM employee WHERE name REGEXP '^ale'; SELECT * FROM employee WHERE name REGEXP 'on$'; SEL ...

  8. mysql 数据操作 单表查询 group by 介绍

    group by 是在where 之后运行 在写单表查询语法的时候 应该把group by 写在 where 之后 执行顺序 1.先找到表 from 库.表名 2.按照where 约束条件 过滤你想要 ...

  9. Struts,Spring,Hibernate优缺点

    Struts跟Tomcat.Turbine等诸 多Apache项目一样,是开源软件,这是它的一大优点.使开发者能更深入的了解其内部实现机制. Struts开放源码框架的创建是为了使开发者在构建基于Ja ...

  10. 004-spring cache-声明性的基于XML的缓存

    一.概述 如果注释不是选项(不能访问源代码或没有外部代码),可以使用XML进行声明式缓存.因此,不是注释用于缓存的方法,而是从外部指定目标方法和缓存指令(类似于声明式事务管理建议). <!-- ...