Import, Export in DB using RODBC
Import, Export in DB using RODBC
Hyukjun Cho
DB에 접속하고 테이블 확인하기
RODBC
를 사용해서 csv 파일을 DB에 넣어보겠습니다.
- 먼저 해당 db에 어떤 테이블이 있는지 확인해보려면
sqlTables()
라는 명령어를 쓰면 됩니다.
take<-function (x)
{
for (i in x) {
if (!is.element(i, .packages(all.available = TRUE))) {
install.packages(i)
}
library(i, character.only = TRUE)
}
}
take(c("DBI","RODBC"))
con_maria = odbcConnect("r-test")
sqlTables(con_maria)
## TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname android TABLE
## 2 testdbname countries TABLE
csv을 DB에 Table로 넣기
- 해당 db에는 contries라는 Table만 존재합니다.
- 이제 데이터와 함께 테이블을 만들어 넣습니다.
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames = F)
## Error in sqlSave(con_maria, read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv", : table 'android' already exists
sqlTables(con_maria)
## TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname android TABLE
## 2 testdbname countries TABLE
- 한번 실행하면 DB에 테이블이 생성 된 것을 확인 할 수 있습니다.
- 하지만 두 번째 실행 할 경우 같은 이름의 Table이 존재 한다고 하는 에러를 볼 수 있습니다.
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames = F)
## Error in sqlSave(con_maria, read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv", : table 'android' already exists
조건문을 써서 테이블 생성하기
- 방금과 같은 경우를 위해, SQL에서는 다음과 같은 방법을 취합니다.
drop table if exist repair;
create table repair(...);
if(is.na(sqlTables(con_maria,tableName = "android")["TABLE_NAME"])==F){
sqlDrop(con_maria,"android")
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames=F)
}else{
sqlSave(con_maria,read.csv("C:\\Users\\Jzester\\Dropbox\\R_TEMP\\android.csv",stringsAsFactors = F),"android",rownames=F)
}
sqlTables(con_maria)
## TABLE_CAT TABLE_SCHEM TABLE_NAME TABLE_TYPE REMARKS
## 1 testdbname android TABLE
## 2 testdbname countries TABLE
import from DB
android<-sqlFetch(con_maria,"android")
write.csv(sqlFetch(con_maria,"android"),"android_test.csv",row.names = F)