我有一个.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&gt; 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
现在,我实际上正在尝试查看我感兴趣的数据(不再是mtcars),名为myData.sql。我被告知这个文件是通用的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中存储了什么,希望看到一个包含列的数据表(比如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中的信息。非常感谢任何建议!
答案 0 :(得分:0)
首先,mydata.sql
不是一个SQLite数据库,它是一个包含将创建和填充数据库的SQL语句的文本文件。
我建议您下载一个SQL平台数据浏览器,例如this one,它是多平台的。使用此工具,您可以创建一个实际的SQLite数据库。例如,如果您使用sqlitebrowser,请转到文件&gt;导入&gt;来自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解释器获得的错误消息可能无法满足您的所有需要细节,以了解出了什么问题。