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