2017-12-27 2 views
1

나는 다음과 같이 나는 MySQL의 테이블이 다음과 같은 R의 dataframeRMYSQL Writetable 오류

Sl NO Name Marks 
1  A  15 
2  B  20 
3  C  25 

있습니다. (Score.table)

내가

 score.table<-'score.table' 

    dbWriteTable(cdbconn, score.table, dataframe, append =F, overwrite=T). 

코드를 다음과 같이 우리는 테이블에 dataframe 쓰기이 코드

username='username' 
    password='userpass' 
    dbname='cdb' 
    hostname='***.***.***.***' 

    cdbconnection = dbConnect(MySQL(), user=username, password=userpass, 
    dbname=dbname, host=hostname) 

다음을 사용하여 Score.table 내 dataframe을 쓴

No CandidateName Score 
    1  AA   1 
    2  BB   2 
    3  CC   3 

실행되고 나는 TRUE를 출력으로 얻는다. 그러나 SQL 테이블을 검사 할 때 새 값이 기존 값을 덮어 쓰지 않습니다. 누군가 나를 도와달라고 요청합니다. 코드가 작동합니다. RMySQL 패키지를 다시 설치하고 다시 실행하면 결과가 동일합니다.

답변

1

업데이트가 발생하지 않는 경우 RMySQL 패키지가 데이터 프레임의 행을 테이블의 기존 레코드에 성공적으로 매핑 할 수 없음을 나타냅니다. 따라서 dbWriteTable 전화가 문제가 있음을 의미합니다. 내가 볼 수있는 두 가지 잠재적 인 문제는 field.types 또는 row.names에 값을 지정하지 않았다는 것입니다. 다음 호출을 고려 :

score.table <- 'score.table' 
dbWriteTable(cdbconn, score.table, dataframe, 
      field.types=list(`Sl NO`="int", Name="varchar(55)", Marks="int"), 
      row.names=FALSE) 

당신이 field.types을 생략 할 경우, 패키지는 유형이 무엇인지 추측하려고합니다. 이 패키지에 익숙하지 않아이 추측이 얼마나 강력한 지 알지 못하지만 복잡한 업데이트 쿼리에 대해 명시 적 유형을 지정하려고 할 가능성이 큽니다.

더 큰 문제는 실제로 row.names의 값을 지정하지 않았을 수 있습니다. TRUE으로 기본값을 설정할 수 있습니다.이 경우 패키지는 실제로 열을 업데이트 중에 보내 게됩니다. 예를 들어 대상 테이블에 세 개의 열이 있고 데이터 프레임에도 세 개의 열이있는 경우 문제가 발생할 수 있으며 네 개의 열로 업데이트하려고합니다.

+0

감사합니다. 필드 유형을 지정해야합니다. 알려 주시기 바랍니다 –

+1

@Raghavanvmvs 그것은 필수는 아니지만 제 제안으로 문제가 해결되면 유스 케이스에 필수적입니다. –

+0

@ Tim Biegeilsen도 똑같이 시도해보고 알려줍니다. 다시 고마워. –

관련 문제