Sqlite   发布时间:2022-05-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了括号转义表名称与dplyr大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我以编程方式获取一堆数据集,其中许多数据都有愚蠢的名字,以数字开头,@R_772_7092@,如减号。因为没有一个数据集是特别大的,而且我想让R对数据类型做出最好的猜测,我(ab)使用dplyr将这些表转储到sqlite中

我使用方括号来摆脱可怕的表名,但这似乎不起作用。例如:

data(iris)
foo.db <- src_sqlite("foo.sqlite3",create = TRUE)
copy_to(foo.db,df=iris,name="[14m3-n4m3]")

这将导致错误消息

sqliteSendquery(conn,statement,bind.data)中的错误:语句中的错误:没有这样的表:14m3-n4m3

如果我选择一个明智的名字,这个工作。然而,由于各种原因,我真的很想保留繁琐的名字。我也可以直接从sqlite创建一个这么命名的表:

sqlite> create table [14m3-n4m3](foo,bar,baz);
sqlite> .tables
14m3-n4m3

没有破裂的东西太深了,这看起来像dplyr正在处理方括号,我无法弄清楚。我怀疑这是一个BUG,但是我想先检查一下,以确保我没有丢失任何东西。

编辑:我忘了提到我只是直接把janky的名字传给dplyr的情况。这个错误出来如下:

library(dplyr)

data(iris)
foo.db <- src_sqlite("foo.sqlite3",name="14M3-N4M3")

Error in sqliteSendquery(conn,statement,bind.data) : 
  error in statement: unrecognized token: "14M3"
这是dplyr中的一个错误。目前的github主人还在那里。正如@hadley所说,他试图逃避dplyr中的表名,以防止这个问题。目前的问题是由于缺少两项功能的转义。当表名不提供(并使用dplyr :: db_create_table完成)时,表创建工作正常。但是,使用不支持奇数表名的DBI :: dbWritetable来将数据插入到表中。如果表名被提供给此函数转义,则无法在表的列表中找到它(您报告的第一个错误)。如果提供了转义,那么执行插入的sql不是协作有效的。

第二个问题出现在表更新时。获取字段名称的代码,这次实际上在dplyr中,再次无法转义表名,因为它使用paste0而不是build_sql。

我已经在a fork of dplyr修复了这两个错误。我还向@hadley提出了一个请求,并在https://github.com/hadley/dplyr/issues/926发布了一个注释。同时,如果你想使用devtools :: install_github(“NikNakk / dplyr “,ref =”sqlite-escape“),然后恢复到主版本一旦它被修复。

便提一下,sql中使用SQL-99方法来转义表名(和其他标识符)是双引号(见SQL standard to escape column names?)。 MS Access使用方括号,而mysql默认为反引号。 dplyr按照标准使用双引号。

最后,@RichardScriven的建议不会普遍运作。例如,SELEct在R中是完全有效的名称,但在sql中不是语法上有效的表名。其他保留字也同样如此。

大佬总结

以上是大佬教程为你收集整理的括号转义表名称与dplyr全部内容,希望文章能够帮你解决括号转义表名称与dplyr所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。