我正在做我的副业项目,从网页抓取中收集数据并自动生成报告。
我想在我的raspberry pi上部署自动化(只是用cronjob运行脚本),但是我遇到了一个奇怪的问题,在我的Mac和Windows笔记本电脑上没有出现。
问题
长话短说,当我在R中打开基于sqlite3文件的数据库时,我的Raspi给了我以下错误消息:“错误:文件不是数据库”。然而,我的代码在我的Mac和Win笔记本电脑上工作。更具体地说,以下代码的行为不同。
library(DBI)
conn <- dbConnect(drv = RSQLite::SQLite(), dbname = "database")
rawdata <- dbReadTable(conn, "db")
在Mac和Win中,这两条线工作得很完美。但是在我的Raspi(Raspi OS和Ubuntu 20. 10)上,它们不工作。
重现问题
我不知道SQLite在不同的操作系统上会有什么不同(或者在其他一些我不知道的地方),下面是可能有帮助的可复制代码:
1.请找到基于文件的sqlite3数据库here对于那些对创建这个sqlite文件感兴趣的人来说,它是用this python script创建的。它基本上是利用Pandas方法df.to_sql()
,并将刮取的数据写入文件。
1.数据清理代码可以在这里找到,但是您不需要运行所有的代码行,因为主要的问题不是在清理部分,而是在读取sqlite3数据库的正确方法上。
我的尝试
此外,我尝试使用最新的R版本(4.2.2 2022-10-31)与Docker的帮助下,看看问题是否与软件包版本有关。似乎Raspi的行为仍然与我的Win笔记本电脑不同。(我没有在我的Mac上尝试Docker)。以下是我如何使用Docker重现我的问题:
1.克隆我的副项目
1.提取r-base映像并创建一个装载项目文件夹的容器
docker pull r-base
docker run -d -it --name renv -v /home/pi/repo/BerkeleyRSF_CrowdMeter:/home/repo r-base
1.转到容器的 shell
docker exec -it renv sh
1.运行R并测试阅读sqlite3数据库
尽管如此,赢的一方工作完美,而Raspi没有。
我尝试搜索有关“错误:文件不是数据库””,但大多数相关的答案都不起作用。有些人建议给予文件扩展名,但这并不能解决问题。有些人说这是一个关于旧SQLite和SQLite3的问题,但我对SQLite的有限知识帮不上忙。
欢迎提出任何意见或建议!谢谢!
可能有用的信息
以下是来自我的Win笔记本电脑和Raspi的会话信息分别:
第一个
1条答案
按热度按时间pgccezyw1#
虽然我还不知道原因,但我用了一种巧妙的方法解决了这个问题。这似乎是一个文件格式问题,至少是文件模式,存储选项或git-lfs的问题。因为我使用
wget
直接下载database
文件,而不是使用git clone
下载整个repo,所以我可以将文件作为数据库打开。