You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法向imdbpy2sql.py传数据库URL,遇create_engine参数错误

问题描述

运行imdbpy2sql.py或s32cinemagoer.py时触发相同错误:
执行命令:

python3 s32cinemagoer.py /home/username/frozendata 'mysql://imdb:imdb@localhost/imdb'

报错信息:TypeError,提示向create_engine()传入无效参数'encoding'。

已尝试的操作:

  • 查阅SQLAlchemy官方文档,确认文档显示create_engine()支持encoding参数,但问题依旧
  • 排查MySQL遗留UTF-8编码问题,怀疑Cinemagoer包的setConnection()函数存在编码传递异常
  • 切换SQLAlchemy 1.3版本,使用PyMySQL适配器解决No module named 'MySQLdb'错误,但核心问题未解决

环境信息:

  • Ubuntu 20.04.6 LTS
  • Python 3.8.10
  • cinemagoer 2023.5.1
  • SQLAlchemy 1.3/2.0
问题分析

核心原因是Cinemagoer(原IMDbPY)的编码参数传递逻辑与SQLAlchemy新版本不兼容:

  1. SQLAlchemy 1.4及以上版本已移除create_engine()的encoding参数,改用connect_args字典传递连接级别的编码配置;但Cinemagoer 2023.5.1的setConnection()函数仍在直接传递encoding参数,导致参数无效报错。
  2. 即使使用SQLAlchemy 1.3,由于MySQL连接适配器(PyMySQL)的参数优先级问题,Cinemagoer主动传递的encoding参数会与URL中的charset配置冲突,同样触发错误。
解决方案

方案1:修改Cinemagoer源码适配SQLAlchemy

找到Cinemagoer安装目录下的sql/__init__.py文件,定位setConnection方法:

  • 将原代码中传递encoding参数的逻辑替换为connect_args传递charset:
    原代码示例:
    engine = create_engine(dburi, encoding=encoding, echo=echo, poolclass=NullPool)
    
    修改为:
    engine = create_engine(dburi, connect_args={"charset": "utf8mb4"}, echo=echo, poolclass=NullPool)
    
    注:utf8mb4是MySQL推荐的完整UTF-8编码,替代遗留的utf8

方案2:调整SQLAlchemy版本与连接URL

  1. 保持SQLAlchemy 1.3版本,将MySQL连接URL修改为包含charset参数:
    python3 s32cinemagoer.py /home/username/frozendata 'mysql+pymysql://imdb:imdb@localhost/imdb?charset=utf8mb4'
    
  2. 同时修改Cinemagoer的setConnection方法,移除encoding参数的传递,避免参数冲突。

方案3:临时绕过编码参数传递

直接修改s32cinemagoer.py或imdbpy2sql.py的代码,找到调用setConnection的位置,删除传递encoding参数的代码行,让SQLAlchemy自动使用URL中指定的charset配置。

内容的提问来源于stack exchange,提问作者Васисулий Пупкин

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:15:25