如何使用 RSQLite 从上传的 .sql 文件中知道一般列名

How to know the general column names from uploaded .sql file using RSQLite

我有一个 .sql 文件,我正尝试使用 R 包 RSQLite 将其读入 SQL 数据库。为了熟悉自己,首先,我查看了 R 数据集 mtcars:

mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "mtcars", mtcars)
str(mydb)

结构如下:

Formal class 'SQLiteConnection' [package "RSQLite"] with 5 slots
  ..@ Id                 :<externalptr> 
  ..@ dbname             : chr ""
  ..@ loadable.extensions: logi TRUE
  ..@ flags              : int 6
  ..@ vfs                : chr ""

接下来我简单的从数据库中读取了五行:

dbGetQuery(mydb, 'SELECT * FROM mtcars LIMIT 5')

          row_names  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1         Mazda RX4 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
2     Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
3        Datsun 710 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
4    Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
5 Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

现在,我可以看到列名,也许我只对 hp>200 感兴趣,所以我这样做:

dbGetQuery(mydb, 'SELECT * FROM mtcars WHERE hp > 200')
            row_names  mpg cyl disp  hp drat    wt  qsec vs am gear carb
1          Duster 360 14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
2  Cadillac Fleetwood 10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
3 Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
4   Chrysler Imperial 14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
5          Camaro Z28 13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
6      Ford Pantera L 15.8   8  351 264 4.22 3.170 14.50  0  1    5    4
7       Maserati Bora 15.0   8  301 335 3.54 3.570 14.60  0  1    5    8

现在,我实际上正在尝试查看名为 myData.sql 的我感兴趣的数据(不再是 mtcars)。有人告诉我这个文件是通用的 SQL,我可以加载到我喜欢的任何数据库中,而且它来自 PostgreSQL.

所以,我试试这个,它输出与以前相同的结构:

mydb <- dbConnect(RSQLite::SQLite(), "myData.sql")
str(mydb)
Formal class 'SQLiteConnection' [package "RSQLite"] with 5 slots
  ..@ Id                 :<externalptr> 
  ..@ dbname             : chr "myData.sql"
  ..@ loadable.extensions: logi TRUE
  ..@ flags              : int 6
  ..@ vfs                : chr ""

现在,我想查看存储在 myData.sql 中的内容,希望看到包含列的数据 table(例如 mtcars)。但是,当我尝试时出现错误:

dbGetQuery(mydb, 'SELECT * LIMIT 5')
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: no tables specified

dbGetQuery(mydb, 'SELECT * FROM mydb LIMIT 5')
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: no such table: mydb

我非常不确定如何开始探索 myData.sql 中的信息。非常感谢任何建议!

首先,mydata.sql 不是 一个 SQLite 数据库,它是一个包含 SQL 语句的文本文件,可以创建和填充您的数据库。

我建议您下载 SQLite 数据浏览器,例如 this one,它是多平台的。使用此工具,您可以创建一个实际的 SQLite 数据库。例如,如果您使用 sqlitebrowser,请从 SQL 文件转到文件 > 导入 > 数据库。这将创建数据库,然后您可以从 R 中连接到该数据库。

如果您不喜欢我建议的数据浏览器,您可以尝试许多其他浏览器,它们或多或少都做同样的事情。祝你好运!

编辑

要从 R 做所有事情,这里有一个使用 RSQLite 的建议:

library(RSQLite)
con <- dbConnect(SQLite(), "my_db.sqlite")

如果 sql 文件包含创建表格所需的一切,您可以使用 RSQLite 的 dbSendQuery 函数:

fileName <- 'mydata.sql'
sql.query <- readChar(fileName, file.info(fileName)$size)
dbSendQuery(con, sql.query)
dbListTables(con) # to see a list of all created tables

如果您 运行 在 dbSendQuery 步骤遇到问题,那么数据浏览器工具会特别方便,因为您从 R 解释器获得的错误消息可能不会为您提供所有信息了解问题所在的必要详细信息。