在dplyr中的DROP TABLE命令

3

我正在尝试使用R中的dplyr从数据库中删除表格。在SQLite中,这样做的方法很清楚:DROP TABLE...但是,当我在dplyr文档中搜索此命令时,我发现没有任何提示表明该命令可用。它可用吗?如何操作?


我猜你需要通过RSQLite的连接直接向数据库发送“drop table”查询。 - joran
所以我来自SAS和Access——一直在使用Python来处理数据,但仍然使用SQLite……您能建议使用R代码实现这一点吗? - TCS
实际上,dplyr 中有一个 db_drop_table 函数被导出,但没有文档记录。它应该是通用 API 的一部分。你仍然需要自己创建与数据库的连接。如何做到这一点在 RSQLite 包中有清晰的文档说明,只需要一行代码即可。 - joran
1
如果您想要一个明确的答案,请提供可复制的代码。 - zipp
1个回答

9

正如之前的评论所提到的,有一些常见的数据库命令没有被充分记录,其中包括?db_drop_table。

要使用它,您需要一个连接对象,这个连接对象附加到您的数据库定义对象:

pg <- src_postgres(dbname='NameOfDatabase', # Define the connection
                   user='user',
                   password='password')
> str(pg)
List of 3
 $ con  :Formal class 'PostgreSQLConnection' [package "RPostgreSQL"] with 1 slot
  .. ..@ Id: int [1:2] 12044 2
 $ info :List of 8
  ..$ host           : chr ""
  ..$ port           : chr "5432"
  ...
  ..$ rsId           : list()
 $ disco:<environment: 0x0000000011160fd8> 
 - attr(*, "class")= chr [1:3] "src_postgres" "src_sql" "src"    

因此,要删除一个表格:
pg$con %>% db_drop_table(table='Tablename') # This drops the table 'Tablename'.

我经常使用这个,但我认为使用pg$con会破坏封装性。也就是说,con字段或插槽明天可能会消失,你甚至不应该知道它的存在。我开发了一个相关的包dplyr.spark,想知道人们对于当"指向"它的所有tbl被垃圾回收时,如何删除SQL表的看法。在tbl创建时会有一个标志和一种修改方式(临时)。通过这种方式,remove命令将只是"rm"。如果你改变了主意,可以通过'persist'或'unpersist'来保存或取消保存tbl。 - piccolbo
该思路是将R对象的普通概念和行为与SQL对象的等效概念和行为相匹配,而不是通过直接访问数据库来突破tbl的抽象。 - piccolbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接