楼主: 叶印痕
2355 1

[统计软件] R语言通过SSH连接数据库以及使用sqlSave添加数据 [推广有奖]

  • 0关注
  • 0粉丝

高中生

20%

还不是VIP/贵宾

-

威望
0
论坛币
121 个
通用积分
0.4500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
371 点
帖子
10
精华
0
在线时间
35 小时
注册时间
2015-5-4
最后登录
2023-10-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
R通过RMySQL包连接本地或者一般的远程数据库是比较简单的,但如果访问的数据库需要SSH跳转,则RMySQL似乎就不太适用了。据此,在Windows环境下,介绍一种R连接SSH跳转数据库的方法:

工具如下:
1.mysql-connector-odbc
2.putty
3.RODBC包

步骤如下:
1.安装工具mysql-connector-odbc,然后在控制面板(win+x,p)中打开“系统和安全”,“管理工具",ODBC数据源(根据系统位数选择)

2.添加ODBC数据源,MySQL ODBC Unicode Driver,配置相关参数
QQ截图20160602142909.png

其中ip一定要填本地地址或者localhost,而非数据库地址,端口也必须是本地一个不用的端口,也非数据库端口,先不要点OK。


3.打开并配置putty。
QQ截图20160602143614.png
在session界面输入ssh的ip以及相应端口,然后保存session名称,点击save,参数按我这个图配置就行了。

4.在connection界面打开SSH,Tunnels界面
QQ截图20160602144100.png
在Source Port端口填写刚才在DSN填写的本地不常用的端口,然后在Destination填写数据库的IP和端口,用英文冒号隔开。
然后点击Add,再点击Open,然后在putty的黑色窗口填写SSH账户名,回车,填写密码。
然后再在DSN界面点击test进行测试,会提示连接成功,然后保存关闭DSN。

5.在R终端(一般用Rstudio比较方便)加载RODBC包(如果没有安装,先install.packages("RODBC")),然后定义连接,如下:
library(RODBC);
conn<-odbcConnect("test");#"test"#为刚才设置的DSN连接名,一般设置为数据库名

然后就可以进行sqlQuery等操作了,如查询表的某些数据sqlQuery(conn,"select * from tablename limit 10;")
当然也可以保存相应的数据(必须是dataframe形式的数据)上传到数据库,在没有定义表主键时,很简单
sqlSave(conn,dataframe,tablename,rownames=F,append=T);

但假如数据库相应表中数据包含主键时,再往里边穿数据,则会报错。
我想到的一种方法是先通过sqlQuery找到该主键的最大值,然后再给数据库的rownames加上这个值再上传。如下:
rownum<-as.numeric(sqlQuery(conn,"select max(id) from tablename"));#因返回的是数据框,需转换为数值型
rownames(dataframe)<-as.numeric(rownames(dataframe))+rownum;#rownames为字符串型,需转换,然后加上

最后通过如下方法:
sqlSave(conn,dataframe,tablename,rownames="主键colname",append=T,addPK=T);
这里的“主键colname”,也就是主键的列名,一般为"id",然后就可以看到数据在往远程数据库中上传了。只是速度相比RMySQL包的dbWritetable方法慢,不知道是不是SSH通道的影响。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:连接数据库 Save sav R语言 AVE 连接数据库

沙发
叶印痕 发表于 2016-6-2 15:29:05 |只看作者 |坛友微信交流群
下次再连接数据库的时候,需要重做第4步进行点Open进行登录。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-14 00:06