项目场景:
项目使用的是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方式填充字符串是无法被识别。
本文探讨了在Flask应用中,使用flask_sqlalchemy和flask_migrate时,通过format字符串与f-string配置数据库连接时遇到的'NoneType'编码错误。解决方法在于将SQLALCHEMY_DATABASE_URI配置从format替换为f-string。
2022

被折叠的 条评论
为什么被折叠?



