一、错误描述:
2023-05-08 20:09:57,488 INFO sqlalchemy.engine.Engine [generated in 0.00019s] ('1.4.0', 1, 0)
[2023-05-08 20:09:57,488] INFO in sqlalchemy.engine.Engine: [generated in 0.00019s] ('1.4.0', 1, 0)
2023-05-08 20:09:57,489 INFO sqlalchemy.engine.Engine ROLLBACK
[2023-05-08 20:09:57,489] INFO in sqlalchemy.engine.Engine: ROLLBACK
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1900, in _execute_context
self.dialect.do_execute(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: metadata
二、解决思路
1、从报错信息看,应该是scrapydweb启动时要创建sqlite数据库,但是没有创建成功,导致提示没有metadata这个数据库表。但是这个创建表和我们普通的flask项目不一样,scrapydweb不是我们写的,总不能修改scrapydweb的源码吧。
2、第一反应是scrapydweb没有安装正确,pip show scrapydweb 以及pip show scrapydweb依赖包,检查是否都安装。经检查都没有问题,相关依赖包都安装成功了。
3、 是不是环境问题,比如版本不匹配。于是检查版本,包括python的版本,以及scrapydweb的版本,scrapydweb相关依赖包的版本。
我的python版本是3.9,看scrapydweb目前支持的最高版本是3.7,一般会向下兼容,python版本应该没有问题,优先看下scrapydweb相关依赖包的版本,在github代码仓库中发现版本和依赖包版本,附地址:https://github.com/my8100/scrapydweb
从报错的信息看与sqlalchemy相关的Flask-SQLAlchemy库有关,对比scrapydweb相关依赖包的版本,果断尝试降低sqlalchemy和Flask-SQLAlchemy的版本,最后sqlalchemy的版本为1.3.12 、Flask-SQLAlchemy库版本为2.5.0、apscheduler的版本为3.5.3,问题解决,正常启动
三、总结
scrapydweb相关依赖包版本不兼容,降低sqlalchemy和Flask-SQLAlchemy的版本,最后sqlalchemy的版本为1.3.12 、Flask-SQLAlchemy库版本为2.5.0、apscheduler的版本为3.5.3