2012-01-14 12 views
16

Ho un frame di dati, chiamato df, che assomiglia a questo:RMySQL dbWriteTable con field.types

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

Il tipo delle colonne è data e numerico. Vorrei scriverlo su un database MySQL usando una connessione già aperta. La connessione funziona bene in quanto sono in grado di interrogare la db fine. Io cerco di eseguire il seguente:

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

Questo genera l'errore:

Error in function (classes, fdef, mtable) : unable to find an inherited method for function "make.db.names", for signature "MySQLConnection", "NULL"

Se non si specifica una field.types, e corro:

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

ottengo l'errore :

Error in mysqlExecStatement(conn, statement, ...) : RS-DBI driver: (could not run statement: BLOB/TEXT column 'dte' used in key specification without a key length)

Qualcuno può perdere un po ' ight su questo?

Grazie

+0

Dubito piuttosto che la colonna dte è di classe "Data". Sta stampando come se fosse di "carattere" di classe. Dovresti pubblicare invece i risultati di str() sulla testa (nome-oggetto). –

+1

la colonna data è di classe data, ho appena scritto l'esempio a mano sopra. faccio esplicitamente as.Date() su di esso per assicurarmi di ciò. – Alex

risposta

22

Dopo aver giocato con le cose, ho capito qual è il problema: field.types devono essere un elenco con nome, non semplicemente un elenco; inoltre i nomi delle righe non devono essere inclusi altrimenti sono necessari tre tipi di campo. Per l'esempio sopra, il seguente funziona bene:

dbWriteTable(con, name="table_name", value=df, field.types=list(dte="date", val="double(20,10)"), row.names=FALSE) 
Problemi correlati