2012-01-14 59 views
16

我有一個數據幀,稱爲df,看起來像這樣:RMySQL dbWriteTable與field.types

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

類型的列是日期和數字。我想用已經打開的連接將它寫入MySQL數據庫。連接工作正常,因爲我能夠查詢分貝罰款。我嘗試運行以下命令:

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

這會產生錯誤:

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

如果我不指定field.types,並運行:

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

我得到的錯誤:

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

任何人都可以擺脫一些l在這個?

感謝

+0

我寧可懷疑你的意思,dte列是類「日期」。它正在打印,就好像它是「角色」類一樣。你應該在head(name-object)上發佈str()的結果。 – 2012-01-14 18:49:20

+1

日期列是類日期,我只是在上面手寫了例子。我明確地做了as.Date()以確保這一點。 – Alex 2012-01-15 00:27:52

回答

22

玩的東西后,我意識到是什麼問題:field.types必須是命名列表,不是一個簡單的列表;此外,行名不能包含,否則我們需要三種字段類型。對於上面的例子,以下工作正常:

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