행위

"R mysql"의 두 판 사이의 차이

DB CAFE

1번째 줄: 1번째 줄:
 +
=== R-MySQL 연결, SELECT, INSERT ===
 +
==== SELECT ====
 +
<source lang=r>
 +
# install packages
 +
install.packages("rJava") # need
 +
install.packages("DBI")
 +
install.packages("RMySQL")
 +
# lib import
 +
library(RMySQL)
 +
# DB Connection
 +
con <- dbConnect(MySQL(),
 +
                dbname = '<dbName>',
 +
                user = '<dbId>',
 +
                password="<dbPasswd>")
 +
 +
# connection info & table schma info
 +
dbListTables(con)
 +
dbListFields(con, "<tableName>")
 +
 +
## 3. Import and export data.frames:
 +
d <- dbReadTable(con, "<tableName>")
 +
# load dataframe
 +
dfData <- read.csv("./<csvFileName>.csv", head = T)
 +
head(dfData)
 +
tail(dfData)
 +
# dbWriteTable 이용하여 삽입 수행
 +
dbWriteTable(con, "<csvFileName>", dfData, overwrite = T) ## table from a data.frame
 +
 +
##5. Run an SQL statement and extract its output in pieces (returns a result set)
 +
## 데이터베이스로부터 데이터를 쿼리를 사용하여 가져옴
 +
## 데이터 형식은 DataFrame
 +
#5.1 SendQurey 방식
 +
rs <- dbSendQuery(con, "select count(*) from <tableName>") # Query Test 1
 +
d1 <- fetch(rs, n = 10000)
 +
d2 <- fetch(rs, n = -1) # 전체 fetch
 +
class(d2)
 +
# > class(d2)
 +
# [1] "data.frame"
 +
#5.2 GetQuery 방식 - fetch 없이 사용가능
 +
df.table <- dbGetQuery(con, "select * from <tableName>") # Query Test 2
 +
head(df.table)
 +
class(df.table)
 +
 +
# 7. Get meta-information on a connection (thread-id, etc.):
 +
summary(MySQL(), verbose = TRUE)
 +
summary(con, verbose = TRUE)
 +
summary(rs, verbose = TRUE)
 +
dbListConnections(MySQL())
 +
dbListResultSets(con)
 +
dbHasCompleted(rs)
 +
 +
# 8. Close connections:
 +
# dbCommit() # 참고
 +
# dbRollback() # 참고
 +
# MySQL 확인 결과 dbWriteTable 결과는 AutoCommite 으로 사료
 +
dbDisconnect(con) # disconnect
 +
 +
* 주의할 점:  dbWriteTable 함수의 옵션인 overwrite=T 인 것...
 +
*  자체적으로 data.frame 자료 형식에 맞춰 기존 table field format을 변형한다(주의)
 +
* 위 예제에서는dbWriteTable 함수에서 row.names 옵션 지정이 없어 디폴트로 row.names=T 로 수행됨.
 +
# 이전 데이터 덮어 쓰기 됨.
 +
</source>
 +
 +
- 따라서 이미 생성된 table의 field format에 맞춰서 삽입하려면 다음과 같이 수행해야 했다.
 +
 +
 +
==== INSERT ====
 +
# 작업 경로 설정
 +
<source lang=r>
 +
getwd()
 +
setwd('~')
 +
 +
# 라이브러리 임포트
 +
library(RMySQL)
 +
# DB 연결
 +
conn <- dbConnect(MySQL(),
 +
                  dbname = '<database_name>',
 +
                  user = '<user_id>',
 +
                  password="<user_pwd>")
 +
 +
# 테이블 확인
 +
dbListTables(conn)
 +
 +
# 데이터 로딩
 +
dfData <- read.csv('./~/<insert_data.csv>', header=T, sep=',') #
 +
 +
# data explore
 +
head(dfData)
 +
# field check
 +
dbListFields(con, "<table_name_insert>")
 +
 +
# 삽입할 테이블의 필드명 지정! - 동일할 경우 시행 X
 +
names(dfData) <- c('<field_name_1>', '<field_name_2>', '<field_name_3>', ... )
 +
 +
# INSERT DATA
 +
dbWriteTable(conn, "table_name_insert", # table to insert
 +
            dfData, # insert data
 +
            overwrite = F, append = T, # !!! keep table field data format
 +
            row.names = F) # 최자측에 자동 행 번호 열을 생성하는 것을 방지함
 +
dbCommit(conn) # commit
 +
</source>
 +
 +
=== R-Mysql 접속 예제 ===
 
<source lang=r>
 
<source lang=r>
 
library(DBI)
 
library(DBI)

2020년 12월 15일 (화) 16:45 판

thumb_up 추천메뉴 바로가기


1 R-MySQL 연결, SELECT, INSERT[편집]

1.1 SELECT[편집]

# install packages
install.packages("rJava") # need
install.packages("DBI")
install.packages("RMySQL")
# lib import
library(RMySQL)
# DB Connection 
con <- dbConnect(MySQL(),
                 dbname = '<dbName>',
                 user = '<dbId>',
                 password="<dbPasswd>")
 
# connection info & table schma info
dbListTables(con)
dbListFields(con, "<tableName>")
 
## 3. Import and export data.frames:
d <- dbReadTable(con, "<tableName>")
# load dataframe
dfData <- read.csv("./<csvFileName>.csv", head = T)
head(dfData)
tail(dfData)
# dbWriteTable 이용하여 삽입 수행
dbWriteTable(con, "<csvFileName>", dfData, overwrite = T) ## table from a data.frame
 
##5. Run an SQL statement and extract its output in pieces (returns a result set)
## 데이터베이스로부터 데이터를 쿼리를 사용하여 가져옴 
## 데이터 형식은 DataFrame
#5.1 SendQurey 방식
rs <- dbSendQuery(con, "select count(*) from <tableName>") # Query Test 1
d1 <- fetch(rs, n = 10000)
d2 <- fetch(rs, n = -1) # 전체 fetch
class(d2) 
# > class(d2)
# [1] "data.frame"
#5.2 GetQuery 방식 - fetch 없이 사용가능
df.table <- dbGetQuery(con, "select * from <tableName>") # Query Test 2
head(df.table)
class(df.table)
 
# 7. Get meta-information on a connection (thread-id, etc.):
summary(MySQL(), verbose = TRUE)
summary(con, verbose = TRUE)
summary(rs, verbose = TRUE)
dbListConnections(MySQL())
dbListResultSets(con)
dbHasCompleted(rs)
 
# 8. Close connections:
# dbCommit() # 참고
# dbRollback() # 참고
# MySQL 확인 결과 dbWriteTable 결과는 AutoCommite 으로 사료
dbDisconnect(con) # disconnect

* 주의할 점:  dbWriteTable 함수의 옵션인 overwrite=T 인 것...
*  자체적으로 data.frame 자료 형식에 맞춰 기존 table field format을 변형한다(주의)
* 위 예제에서는dbWriteTable 함수에서 row.names 옵션 지정이 없어 디폴트로 row.names=T 로 수행됨. 
# 이전 데이터 덮어 쓰기 됨.

- 따라서 이미 생성된 table의 field format에 맞춰서 삽입하려면 다음과 같이 수행해야 했다.


1.2 INSERT[편집]

  1. 작업 경로 설정
getwd()
setwd('~')
 
# 라이브러리 임포트
library(RMySQL)
# DB 연결 
conn <- dbConnect(MySQL(),
                  dbname = '<database_name>',
                  user = '<user_id>',
                  password="<user_pwd>")
 
# 테이블 확인
dbListTables(conn)
 
# 데이터 로딩
dfData <- read.csv('./~/<insert_data.csv>', header=T, sep=',') # 
 
# data explore
head(dfData)
# field check
dbListFields(con, "<table_name_insert>")
 
# 삽입할 테이블의 필드명 지정! - 동일할 경우 시행 X
names(dfData) <- c('<field_name_1>', '<field_name_2>', '<field_name_3>', ... )
 
# INSERT DATA
dbWriteTable(conn, "table_name_insert", # table to insert
             dfData, # insert data
             overwrite = F, append = T, # !!! keep table field data format
             row.names = F) # 최자측에 자동 행 번호 열을 생성하는 것을 방지함
dbCommit(conn) # commit

2 R-Mysql 접속 예제[편집]

library(DBI)
# Connect to my-db as defined in ~/.my.cnf
#[rs-dbi]
#database=test
#user=root
#password=

con <- dbConnect(RMySQL::MySQL(), group = "my-db")

dbListTables(con)
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)

dbListFields(con, "mtcars")
dbReadTable(con, "mtcars")

# You can fetch all results:
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
dbClearResult(res)

# Or a chunk at a time
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
while(!dbHasCompleted(res)){
  chunk <- dbFetch(res, n = 5)
  print(nrow(chunk))
}
# Clear the result
dbClearResult(res)

# Disconnect from the database
dbDisconnect(con)