1

플라스크 -sqlalchemy가있는 플라스크에서 & 데이터베이스 생성을 위해 flask migrate을 사용하고 있습니다.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로 이스케이프의 질문 링크 위의 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에 '%'(백분율 기호)와 관련된 문제가 있습니다.

나는 보간 오류를 지나치게하는 두 개의 백분율 기호 ('%%')로 백분율 기호를 대체 해 보았습니다. 그러나 이로 인해 잘못된 암호로 인해 데이터베이스에 연결할 수 없습니다.

해결 방법 지금은 db 암호에 '%'를 사용하지 않는 것이 좋습니다. 만족스러운 해결책은 아니지만 지금은 할 것입니다. 나는이 문제에 대한 "alembic"의 github에서 쪽지를 작성하겠습니다. 그들의 패키지에서 RawConfigParser를 사용하는 것이이 문제를 피하는 데 도움이 될 수 있습니다.

+0

이건 정말 질문에 대답하지 않습니다. 다른 질문이있는 경우 [질문하기] (http://stackoverflow.com/questions/ask)를 클릭하여 질문 할 수 있습니다. 당신은 [현상금을 추가] (http://stackoverflow.com/help/privileges/set-bounties)하면 충분한 [평판] (http://stackoverflow.com/help/)이 일단이 질문에 더 많은 관심을 끌 수 있습니다. 평판). - [검토 중] (리뷰/저품절 게시물/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.