RMySQL dbWriteTable с полем.
У меня есть фрейм данных, называемый df
, который выглядит так:
dte, val
2012-01-01, 23.2323
2012-01-02, 34.343
Тип в столбцах - дата и число. Я хотел бы написать это в базу данных MySQL, используя уже открытое соединение. Соединение работает нормально, так как я могу запросить штраф db. Я пытаюсь запустить следующее:
dbWriteTable(con, name="table_name", value=df, field.types=list("date", "double(20,10)"))
Это порождает ошибку:
Ошибка в функции (classes, fdef, mtable): невозможно найти унаследованный метод для функции "make.db.names", для подписи "MySQLConnection", "NULL"
Если я не укажу field.types и запустил:
dbWriteTable(con, name="table_name", value=df)
Я получаю сообщение об ошибке:
Ошибка в mysqlExecStatement (conn, statement,...): драйвер RS-DBI: (не удалось запустить оператор: BLOB/TEXT column 'dte', используемый в спецификации ключа без длины ключа)
Может ли кто-нибудь пролить свет на это?
Спасибо
Ответы
Ответ 1
После игры с вещами я понял, в чем проблема: field.types
должен быть вектором списка field.types
, а не просто списком; кроме того, имена строк не должны включаться, иначе нам нужны три типа полей. Для вышеприведенного примера выполняется следующее:
dbWriteTable(con, name="table_name", value=df,
field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
Ответ 2
Изменение: field.types теперь должен быть символом VECTOR вместо списка, поэтому просто измените список (с помощью c (.