RMYSQL Ошибка записи

У меня есть следующий R dataframe

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

У меня есть таблица MySQL следующим образом. (Score.table)

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

Я написал свой фрейм данных в Score.table, используя этот код

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

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

Далее мы записываем фрейм данных в таблицу следующим образом

     score.table<-'score.table'

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

Код запускается, и я получаю 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, в этом случае пакет фактически отправит дополнительный столбец во время обновления. Это может вызвать проблемы, например, если ваша целевая таблица имеет три столбца, а фрейм данных также имеет три столбца, то вы пытаетесь обновить с помощью четырех столбцов.

Другие вопросы по тегам