24

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列'dte')

誰かがこれに光を当てることができますか?

ありがとう

4

2 に答える 2

34

いろいろと遊んだ後、問題が何であるかを理解しました。単なるリストではなくfield.types、NAMEDリストベクトルでなければなりません。さらに、行名を含めないでください。そうしないと、3 つのフィールド タイプが必要になります。上記の例では、次のようにするとうまくいきます。

dbWriteTable(con, name="table_name", value=df,
  field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
于 2012-01-15T18:39:32.693 に答える
-1

それはテーブル名のためです。mysql テーブル名に大文字を使用しないでください。

于 2020-08-19T10:26:56.013 に答える