使用R操作MySQL

目的

使用R将豆瓣电影数据导入到MySql中。

平台

所有代码在windows7系统上运行。

数据

豆瓣电影数据,点击这里 从张宏伦的Github上下载。

实现

# 加载需要的R包
library(RMySQL)
library(data.table)

# 读取数据
movie = fread('data/douban_movie_clean.txt', sep = '^', encoding = 'UTF-8')


movie = data.frame(movie)
head(movie)

## 连接数据库
conn <- dbConnect(RMySQL::MySQL(), username="root", password= '123456', host="localhost", port=3306, dbname = 'study')

# 查看MySQL连接实例信息
summary(conn, verbose = TRUE)
# 查看数据库的表
dbListTables(conn)

# 建表并插入数据
dbWriteTable(conn,"movie", movie, overwrite = T)

# 设置数据库的连接信息
dbSendQuery(conn,'SET NAMES gbk')

# 读取数据库信息到R中
mysql=dbGetQuery(conn,"select * from movie")

## 关闭连接
dbDisconnect(conn)

利用R将数据写入到MySql中,与python不同,不需要提前在数据库中建立一个空表,就可以直接把数据作为一个数据表导入到数据库中。然而,这里也有一个前提,你必须要把要数据表要导入的数据库的排序规则设置为gbk_chinese_ci(当然这里指文件中含有中文)。导入数据前,需要对MySql数据库的排序规则特别设置,不知道是windows下的特有情况,还是所有系统下,都要提前设置。

此外,还要特别提醒,从外部向R读入豆瓣电影数据的时候,由于存在缺失值,在windows的R中read.csv不能自动跳过这一行会提示错误(好像mac和linux下的read.csv()函数能自动跳过有缺失值的行,真是坑人的windows),只能使用data.table包里的fread()函数(找到找个函数,还多亏张宏伦建的微信群里面的网友帮助)。

最后,还有一个问题,一直不太明白,就是这条语句dbSendQuery(conn,’SET NAMES gbk’)。从数据库中读取数据数据时,数据本身就是gbk格式,不知道为什么还要进行限制,貌似没有这条语句,R不能顺利读取MySql的数据。事实上,编码格式,一直困惑着我,尤其是windows下的编码格式。什么数据文件本省的编码格式,软件(R或者)本身的编码格式,windows的编码格式,一头雾水。还希望看到博客的朋友们指点迷津。

- - - - - -

参考文章

1.R批量处理txt文件并写入MySQL

2.RMySQL数据库编程指南

Previous     Next Xu Kuang /
Published under (CC) BY-NC-SA in categories 跟着宏伦学习全栈工程师  tagged with R