Question

J'ai un bloc de données, appelé df, qui ressemble à ceci:

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

Le type sur les colonnes est la date et le numérique.Je voudrais écrire ceci dans une base de données MySQL en utilisant une connexion déjà ouverte.La connexion fonctionne bien car je suis capable d'interroger l'amende de base de données.J'essaye d'exécuter ce qui suit:

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

Cela génère l'erreur:

Erreur dans la fonction (classes, fdef, mtable): impossible de trouver une méthode héritée pour la fonction "make.db.names", pour la signature "MySQLConnection", "NULL"

Si je ne spécifie pas de field.types et que je lance:

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

J'obtiens l'erreur:

Erreur dans mysqlExecStatement (conn, instruction, ...): pilote RS-DBI: (impossible d'exécuter l'instruction: colonne BLOB / TEXT 'dte' utilisée dans la spécification de clé sans longueur de clé)

Quelqu'un peut-il nous éclairer à ce sujet?

Merci

Était-ce utile?

La solution

Après avoir joué avec les choses, j'ai réalisé quel était le problème: field.types doit être un vecteur NAMED list , pas simplement une liste;de plus, les noms de lignes ne doivent pas être inclus, sinon nous avons besoin de trois types de champs.Pour l'exemple ci-dessus, ce qui suit fonctionne très bien:

dbWriteTable(con, name="table_name", value=df,
  field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top