Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用RSQLite从上载的.sql文件中了解常规列名_Sql_R_Rsqlite - Fatal编程技术网

如何使用RSQLite从上载的.sql文件中了解常规列名

如何使用RSQLite从上载的.sql文件中了解常规列名,sql,r,rsqlite,Sql,R,Rsqlite,我有一个.sql文件,我正试图使用R包RSQLite将其读入sql数据库。为了熟悉我自己,首先,我看了一下MTR数据集: mydb <- dbConnect(RSQLite::SQLite(), "") dbWriteTable(mydb, "mtcars", mtcars) str(mydb) 现在,我可以看到列名,也许我只对hp>200感兴趣,所以我会: dbGetQuery(mydb, 'SELECT * FROM mtcars WHERE hp > 200')

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

mydb <- dbConnect(RSQLite::SQLite(), "")
dbWriteTable(mydb, "mtcars", mtcars)
str(mydb)
现在,我可以看到列名,也许我只对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
现在,我正试图查看我感兴趣的数据(不再是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中的信息。非常感谢您的建议

First things First,
mydata.sql
不是一个SQLite数据库,它是一个包含sql语句的文本文件,将创建并填充数据库

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

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

编辑

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

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

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

感谢您解释我的错误信息。我想知道为什么您建议在RSQLite包上使用SQLite数据浏览器(和其他数据浏览器)。是因为我的.sql文件不能用RSQLite包填充吗?谢谢。你可以从R开始做任何事情。但是我发现用工具做那种背景工作更方便。我可以更新我的答案,以显示如何从R做到这一点。如果你能做到这一点,我将不胜感激!如果从R开始不是太难;我真想知道它是怎么工作的。另外,我按照您的指示做了,但出现了一个错误“导入数据时出错:语句中出错#1:near“SET”语法错误。正在中止执行。”我在Google上找不到太多关于此问题的疑难解答。再次感谢…可能存在兼容性问题。SQL在不同的DBMS中并不完全是标准的。不幸的是,您可能需要调整sql语法,以便能够使用SQLite运行它。如果您在数据浏览器工具中遇到此问题,您也会被R-way阻塞。刚才看到,对于多行字符串,RSQLite似乎很难解决—不确定,但可能是在存在非unix换行符的情况下。有关更多信息,请参阅本文:
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 ""
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
library(RSQLite)
con <- dbConnect(SQLite(), "my_db.sqlite")
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