1

flask migrateをデータベース作成用に使用しています& flask-sqlalchemyのフラスコでの移動。私は私のデータベース・ユーザー・パスワードが含まれている変更されるまでFlask-migrateでValueError:位置15の接続文字列の無効な補間構文

すべてが正常に働いていた「@」、それはそう動作を停止し、私はその上映、それはアプリケーションのためではなく、フラスコ、移行のために働いて Writing a connection string when password contains special characters

に基づいて私のコードを更新しましたエラーここでpython manage.py db migrate

ValueError: invalid interpolation syntax in u'mysql://user:p%[email protected]/testdb' at position 15 

すなわちを移行しながら、パスワードは[email protected]であり、その(urlquoteでエスケープS上記の質問リンクの上にee)。

フル・エラー・スタック:

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%[email protected]/testdb' at position 15 

私は同様にそれを経験した後、この問題の解決策を持っている

答えて

-1

を助けてください。

文字列をurlencodeした後、db接続URIに '%'(パーセント記号)の問題があります。

私は補間エラーを超えてしまう二重パーセント記号( '%%')でパーセント記号を置き換えようとしました。しかし、その結果、パスワードが正しくないためにデータベースに接続できなくなりました。

解決策データベースパスワードに '%'を使用しないようにする予定です。満足できる解決策ではありませんが、今のところ解決します。私はこの問題の "alembic"のギターを書き留めます。パッケージにRawConfigParserを使用しているようだが、この問題を回避するのに役立つだろう。

+0

これは本当に質問に答えていません。別の質問がある場合は、[Ask Question](http://stackoverflow.com/questions/ask)をクリックして質問することができます。十分な[評判](http://stackoverflow.com/help/)があれば、[賞金を追加](http://stackoverflow.com/help/privileges/set-bounties)でもこの質問にもっと注意を引くことができます。何が評判か)。 - [レビューから](/レビュー/低品質の投稿/ 14423800) –

+0

私は質問していません。私は注意を引くことを望んでいない。私も検索してこの質問を見つけることに終わった人のための情報を提供しています。 –

2

migrations/env.pyファイルには、この問題の原因となるコードがあります。

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

SQLALCHEMY_DATABASE_URI%兆候がある場合、これはエラーになります。

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を参照してくださいmigrations/env.pyファイルを編集し、問題のある行を変更することでこの問題を解決することができます

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.