RMySQL dbWriteTable с полем. - программирование
Подтвердить что ты не робот

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', используемый в спецификации ключа без длины ключа)

Может ли кто-нибудь пролить свет на это?

Спасибо

4b9b3361

Ответ 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 (.