Domanda

Ho un frame di dati, chiamato df, sembra così:

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

Il tipo sulle colonne è data e numerica. Vorrei scrivere questo su un database MySQL utilizzando una connessione già aperta. La connessione funziona bene perché sono in grado di interrogare la multa DB. Provo a eseguire quanto segue:

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

Questo genera l'errore:

Errore nella funzione (classi, fdef, mtable): impossibile trovare un metodo ereditato per la funzione "make.db.names", per la firma "mysqlconnection", "null"

Se non specifico un campo. Tipi ed eseguo:

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

Ricevo l'errore:

Errore in mysqlexecstatement (Conn, istruzione, ...): driver RS-dbi: (Impossibile eseguire l'istruzione: blob/colonna di testo 'dte' utilizzato nelle specifiche chiave senza una lunghezza della chiave)

Qualcuno può far luce su questo?

Grazie

È stato utile?

Soluzione

Dopo aver giocato con le cose, mi sono reso conto qual è il problema: field.types Deve essere un nome elenco Vector, non semplicemente un elenco; Inoltre, i nomi delle righe non devono essere inclusi altrimenti abbiamo bisogno di tre tipi di campo. Per l'esempio sopra, quanto segue funziona bene:

dbWriteTable(con, name="table_name", value=df,
  field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top