2012-01-14 30 views
16

Tôi có một khung dữ liệu, gọi là df, trông như thế này:RMySQL dbWriteTable với field.types

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

Loại trên cột là ngày tháng và số. Tôi muốn viết điều này vào một cơ sở dữ liệu MySQL bằng cách sử dụng một kết nối đã được mở. Kết nối hoạt động tốt vì tôi có thể truy vấn tiền phạt của db. Tôi cố gắng chạy như sau:

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

này tạo ra các lỗi:

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

Nếu tôi không chỉ định một field.types, và chạy:

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

tôi nhận được lỗi :

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

Bất cứ ai có thể bỏ một số l ight về điều này?

Cảm ơn

+0

Tôi khá nghi ngờ ý nghĩa của bạn rằng cột dte thuộc lớp "Ngày". Nó được in như thể nó là của lớp "nhân vật". Bạn nên đăng thay vì kết quả của str() trên đầu (tên-đối tượng). –

+1

cột ngày là ngày của lớp, tôi chỉ viết lên ví dụ bằng tay ở trên. tôi rõ ràng làm as.Date() trên đó để đảm bảo điều này. – Alex

Trả lời

22

Sau khi chơi với mọi thứ, tôi nhận ra vấn đề là gì: field.types phải là danh sách NAMED, không chỉ đơn giản là danh sách; ngoài ra các tên hàng không được bao gồm nếu không chúng ta cần ba loại trường. Đối với ví dụ trên, các công trình sau đây hoạt động tốt:

dbWriteTable(con, name="table_name", value=df, field.types=list(dte="date", val="double(20,10)"), row.names=FALSE) 
Các vấn đề liên quan