Pregunta

Tengo un marco de datos, llamado df, que se ve así:

dte, val
2012-01-01, 23.2323
2012-01-02, 34.343

El tipo de columnas es fecha y numérica. Me gustaría escribir esto en una base de datos MySQL utilizando una conexión ya abierta. La conexión funciona bien, ya que puedo consultar la multa de DB. Intento ejecutar lo siguiente:

dbWriteTable(con, name="table_name", value=df, field.types=list("date", "double(20,10)"))

Esto genera el error:

Error en la función (clases, FDEF, MTable): No se puede encontrar un método heredado para la función "make.db.names", para la firma "mySqlConnection", "null"

Si no especifico un campo. Types y ejecuto:

dbWriteTable(con, name="table_name", value=df)

Recibo el error:

Error en mySQLExecStatement (Conn, Declaración, ...): controlador RS-DBI: (no se pudo ejecutar la declaración: columna de blob/text 'dte' utilizado en la especificación de clave sin una longitud de clave)

¿Alguien puede arrojar algo de luz sobre esto?

Gracias

¿Fue útil?

Solución

Después de jugar con cosas, me di cuenta de cuál es el problema: field.types Debe ser un nombrado lista vector, no simplemente una lista; Además, los nombres de la fila no deben incluirse de lo contrario necesitamos tres tipos de campo. Para el ejemplo anterior, lo siguiente funciona bien:

dbWriteTable(con, name="table_name", value=df,
  field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top