创建ChatBot实例时触发sqlalchemy.exc.ArgumentError报错如何解决
问题原因
你遇到的报错是chatterbot v1.1.0a7与SQLAlchemy 1.4+版本API不兼容导致的:SQLAlchemy 1.4版本对Dialect.has_table()方法做了两处调整:一是要求传入的第一个参数必须是Connection对象而非Engine对象,二是将该方法划为内部方法,公开场景推荐使用inspect(engine).has_table()的写法,而chatterbot v1.1.0a7的SQL存储适配器还在使用旧版API,因此触发报错。该报错和本地SQL服务是否启动、ChatBot名称格式无关联。
解决方案
以下三个方案任选其一即可:
方案1:降级SQLAlchemy到适配版本(操作最简单)
chatterbot v1.1系列适配的是SQLAlchemy 1.3.x版本,直接执行以下命令替换版本即可:
pip uninstall sqlalchemy -y pip install sqlalchemy==1.3.24
安装完成后重新运行原代码即可正常初始化ChatBot实例。
方案2:手动修改chatterbot源码适配新版SQLAlchemy(不想降级依赖可选)
打开报错提示中的SQL存储适配器文件:/usr/local/lib/python3.9/site-packages/ChatterBot-1.1.0a7-py3.9.egg/chatterbot/storage/sql_storage.py
- 在文件头部新增导入语句:
from sqlalchemy import inspect
- 找到第46行附近调用
has_table的代码,原代码类似:
if not engine.dialect.has_table(engine, table_name):
替换为:
if not inspect(engine).has_table(table_name):
保存修改后重新运行代码即可。
方案3:使用MongoDB作为存储后端
你已经验证MongoDatabaseAdapter无适配问题,如果项目接受MongoDB作为存储,可以在初始化时指定存储适配器即可绕过SQL适配问题:
from chatterbot import ChatBot bot = ChatBot( "The Royal Zhao", storage_adapter="chatterbot.storage.MongoDatabaseAdapter" )
内容的提问来源于stack exchange,提问作者mac389
相关产品推荐
相关产品推荐

