RMySQL dbWriteTable 与 field.types
Posted
技术标签:
【中文标题】RMySQL dbWriteTable 与 field.types【英文标题】:RMySQL dbWriteTable with field.types 【发布时间】:2012-02-10 11:01:35 【问题描述】:我有一个名为 df
的数据框,如下所示:
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)"))
这会产生错误:
函数错误(类、fdef、mtable):无法找到函数“make.db.names”的继承方法,用于签名“MySQLConnection”、“NULL”
如果我没有指定 field.types,然后运行:
dbWriteTable(con, name="table_name", value=df)
我得到错误:
mysqlExecStatement(conn, statement, ...) 中的错误:RS-DBI 驱动程序:(无法运行语句:BLOB/TEXT 列“dte”在没有密钥长度的密钥规范中使用)
任何人都可以对此有所了解吗?
谢谢
【问题讨论】:
我很怀疑你暗示 dte 列属于“日期”类。它正在打印,就好像它是“字符”类一样。您应该在 head(name-object) 上发布 str() 的结果。 日期列是类日期,我只是在上面手工写了例子。我明确地做 as.Date() 以确保这一点。 【参考方案1】:那是因为表名。 mysql 表名不要使用大写字母。
【讨论】:
OP 在哪里提到了带有大写字母的表名?【参考方案2】:玩了之后才发现问题出在哪里:field.types
必须是一个NAMED list向量,而不是简单的列表;此外,不能包含行名,否则我们需要三种字段类型。对于上面的示例,以下工作正常:
dbWriteTable(con, name="table_name", value=df,
field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)
【讨论】:
感谢 @***y 提供有关field.types
对象类更改的提示
你不能为列列表添加字段而不是一一添加吗?以上是关于RMySQL dbWriteTable 与 field.types的主要内容,如果未能解决你的问题,请参考以下文章
错误:protect():使用 dbWriteTable (RSQLite) 写入文件时保护堆栈溢出