首页 新闻 会员 周边 捐助

我替换了sqlite数据库文件,导致项目直接访问不了,如何解决问题

0
悬赏园豆:20 [待解决问题]

上周将本地写的项目更新到服务器,为了方便直接将服务器上的sqlite数据库文件加上了.bak后缀备份,然后把桌面的sqlite文件上传到了服务器的目标位置,重新启动项目,访问后报错500,查看日志,报错no such table...,服务器手动连接sqlite数据库,.table发现表都存在,为啥会报错不存在呢?于是将上传的数据库文件备份,再把之前的数据库文件恢复,重新启动项目,访问还是报一样的错误。后来实在没办法,直接使用项目中写好的flask命令初始化数据库,再次重启项目,又又又是一样的报错。网上说可能是地址问题,尝试了检查连接的地方,没有任何改动,本地输出连接地址也没问题。但是为啥会突然连接不到我的数据库文件了呢?现在都还没解决。。。在地铁上,明天再把代码图弄上去

这是连接sqlite的代码

李珍拆的主页 李珍拆 | 初学一级 | 园豆:188
提问于:2023-04-11 22:02
< >
分享
所有回答(2)
0

从描述看大概率还是出在代码中访问 db 的地址上,请仔细检查下这部分。

幻天芒 | 园豆:37205 (高人七级) | 2023-04-12 01:17

已补充连接db的代码图,原来就是这么连接的,不知道为啥突然连接的并不是目标db文件

服务器记录的图和sqlite库表图

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-12 09:51

@李珍拆:   代码中并没有看到连接db的代码,你只要贴下具体连接 db 时传递的路径是什么。

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2023-04-13 01:11

@幻天芒: 传递的路径是 DATABASE = os.path.join(app.instance_path,'flaskr.sqlite')
app.instance_path 会返回instance文件夹的地址。

get_db函数为连接db的代码

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-13 08:42

@李珍拆: 从你的日志和代码来看,数据库应该是要和 app.py 放在同一个目录中。当前看你的 app.py 是在 site-package 目录下,而 flaskr.sqlite 是在 instance 目录下。

另,你可以访问下 /hello,在控制台看下具体检索的db地址是什么~

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2023-04-14 02:04

@幻天芒:
windows上调试是好的
这里项目flaskr是作为一个扩展安装在site-package里的,相当于app.py,所以我理解和instance是同一个目录。

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-14 09:57

@李珍拆: 可以打日志出来看下,具体是从哪儿检索 db 文件呢,让日志告诉你准确的路径。

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2023-04-14 11:07

@幻天芒: 嗯嗯,我已经加了日志,等下看看

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-14 11:09

@幻天芒: 从服务器使用flask run运行来看输出的地址寻找的没有问题,为instance文件夹的地址(/home/liyue/plan_project/instance)。不知道用gunicorn运行和flask run运行获取的是否可能不一致。主要是gunicorn运行我打log到日志文件,访问页面后没有log输出。。。要继续花时间看了
感谢大佬们的回复

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-17 20:43
1

不知道解决了没有,就像上面说的,是db文件的路径没有配置对,处理办法很多,比如写成绝对路径(省事1);用os.path.join的时候,没必要拷贝官方的那个例子,其实可以直接配置下项目所在的目录 os.path.abspath(os.path.dirname(file)) ; 还有,可以在pycharm里,右键项目,设置那个目录为源代码根目录

人人从众 | 园豆:204 (菜鸟二级) | 2023-04-16 22:25

最近比较忙,没来得及去看,从输出的服务器路径看获取的地址是对的,可以获取到正确的instance文件夹,空了我再试试看

支持(0) 反对(0) 李珍拆 | 园豆:188 (初学一级) | 2023-04-17 20:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册