项目场景:
项目使用的是flask框架,使用flask_sqlalchemy对mysql数据库进行操作,使用flask_migrate进行数据迁移:
执行flask db migrate 时候突然报错,错误如下:
self.encoding = charset_by_name(self.charset).encoding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'encoding'
不同环境可能引起的原因不一样。
原因分析:
经过测试分析原因:config文件使用以下方式配置连接
SQLALCHEMY_DATABASE_URI= 'mysql+pymysql://{}:{}@{}/{}?charset={}'.format(DATABASE_USERNAME,DATABASE_PASSWORD,DATABASE_HOSTNAME,DATABASE_PORT,DATABASE,DATABASE_ENCODING)
如果改成
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{DATABASE_USERNAME}:{DATABASE_PASSWORD}@{DATABASE_HOSTNAME}:{DATABASE_PORT}/{DATABASE}?charset={DATABASE_ENCODING}"
就可以解决问题,应该是config用format方式填充字符串是无法被识别。