gpt4 book ai didi

python - 在 Flask 中迁移 ValueError : invalid interpolation syntax in connection string at position 15

转载 作者:太空狗 更新时间:2023-10-29 20:39:23 26 4
gpt4 key购买 nike

我正在使用 flask migrate 在带有 flask-sqlalchemy 的 flask 中创建和迁移数据库。

一切正常,直到我更改我的数据库用户密码包含'@'然后它停止工作所以,我更新了我的代码基于 Writing a connection string when password contains special characters

它适用于应用程序但不适用于 flask-migration,它在迁移时显示错误

python manage.py db migrate

ValueError: invalid interpolation syntax in u'mysql://user:p%40ssword@localhost/testdb' at position 15

这里的密码是 p@ssword 并且它被 urlquote 转义(见上面的问题链接)。

完整的错误堆栈:

Traceback (most recent call last):
File "manage.py", line 20, in <module>
manager.run()
File "/usr/local/lib/python2.7/dist-packages/flask_script/__init__.py", line 412, in run
result = self.handle(sys.argv[0], sys.argv[1:])
File "/usr/local/lib/python2.7/dist-packages/flask_script/__init__.py", line 383, in handle
res = handle(*args, **config)
File "/usr/local/lib/python2.7/dist-packages/flask_script/commands.py", line 216, in __call__
return self.run(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/flask_migrate/__init__.py", line 177, in migrate
version_path=version_path, rev_id=rev_id)
File "/usr/local/lib/python2.7/dist-packages/alembic/command.py", line 117, in revision
script_directory.run_env()
File "/usr/local/lib/python2.7/dist-packages/alembic/script/base.py", line 407, in run_env
util.load_python_file(self.dir, 'env.py')
File "/usr/local/lib/python2.7/dist-packages/alembic/util/pyfiles.py", line 93, in load_python_file
module = load_module_py(module_id, path)
File "/usr/local/lib/python2.7/dist-packages/alembic/util/compat.py", line 79, in load_module_py
mod = imp.load_source(module_id, path, fp)
File "migrations/env.py", line 22, in <module>
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
File "/usr/local/lib/python2.7/dist-packages/alembic/config.py", line 218, in set_main_option
self.set_section_option(self.config_ini_section, name, value)
File "/usr/local/lib/python2.7/dist-packages/alembic/config.py", line 245, in set_section_option
self.file_config.set(section, name, value)
File "/usr/lib/python2.7/ConfigParser.py", line 752, in set
"position %d" % (value, tmp_value.find('%')))
ValueError: invalid interpolation syntax in u'mysql://user:p%40ssword@localhost/testdb' at position 15

请帮忙

最佳答案

migrations/env.py 文件中,您会找到导致此问题的代码。

config.set_main_option('sqlalchemy.url',
current_app.config.get('SQLALCHEMY_DATABASE_URI'))

如果 SQLALCHEMY_DATABASE_URI 中有 % 符号,这将导致错误。

您可以通过编辑 migrations/env.py 文件来解决这个问题,并将有问题的行更改如下

db_url_escaped = current_app.config.get('SQLALCHEMY_DATABASE_URI').replace('%', '%%')
config.set_main_option('sqlalchemy.url', db_url_escaped)

另见 the documentation of set_main_option :

Note that this value is passed to ConfigParser.set, which supports variable interpolation using pyformat (e.g. %(some_value)s). A raw percent sign not part of an interpolation symbol must therefore be escaped, e.g. %%. The given value may refer to another value already in the file using the interpolation format.

关于python - 在 Flask 中迁移 ValueError : invalid interpolation syntax in connection string at position 15,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39849641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com