【问题标题】:flask, cannot migrate. 'SQLALCHEMY_DATABASE_URI').replace('%', '%%')) AttributeError: 'NoneType' object has no attribute 'replace'烧瓶,不能迁移。 'SQLALCHEMY_DATABASE_URI').replace('%', '%%')) AttributeError: 'NoneType' 对象没有属性 'replace'
【发布时间】:2019-11-09 10:22:53
【问题描述】:

我正在尝试按照本教程制作应用程序https://www.codementor.io/olawalealadeusi896/restful-api-with-python-flask-framework-and-postgres-db-part-1-kbrwbygx5 但是我一直坚持使用“python manage.py db migrate”运行迁移,我遇到了这个错误,无法识别它们的含义,也不知道如何解决这个问题,因为我是 python 的新手。

FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.

'SQLALCHEMY_TRACK_MODIFICATIONS 会增加大量开销和'

Traceback (most recent call last):
  File "manage.py", line 17, in <module>
    manager.run()
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/flask_script/__init__.py", line 417, in run
    result = self.handle(argv[0], argv[1:])
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/flask_script/__init__.py", line 386, in handle
    res = handle(*args, **config)
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/flask_script/commands.py", line 216, in __call__
    return self.run(*args, **kwargs)
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/flask_migrate/__init__.py", line 95, in wrapped
    f(*args, **kwargs)
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/flask_migrate/__init__.py", line 215, in migrate
    version_path=version_path, rev_id=rev_id)
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/alembic/command.py", line 214, in revision
    script_directory.run_env()
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/alembic/script/base.py", line 489, in run_env
    util.load_python_file(self.dir, "env.py")
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/alembic/util/pyfiles.py", line 98, in load_python_file
    module = load_module_py(module_id, path)
  File "/home/jebbyk/.local/share/virtualenvs/blog_rest-pkqspueH/lib/python3.6/site-packages/alembic/util/compat.py", line 173, in load_module_py
    spec.loader.exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "migrations/env.py", line 27, in <module>
    'SQLALCHEMY_DATABASE_URI').replace('%', '%%'))
AttributeError: 'NoneType' object has no attribute 'replace'

它看起来像migrations>env.py中这一行的主要问题

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

但“迁移”目录是在运行“python manage.py db init”后自动生成的 而且我不确定它是否包含任何错误

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    关注your exampleSQLALCHEMY_DATABASE_URIvariable get from system environment

    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
    

    所以。您需要从终端运行以下命令来设置系统环境变量

    $ export DATABASE_URL= postgres://name:password@houst:port/blog_api_db
    

    【讨论】:

    • 是的,我已经完成了,并检查了这个变量是否已正确保存运行“prinenv”命令。但那是以前。现在“printenv”返回没有这三个变量的结果。是否有可能,这些变量在计算机重新加载后消失,或者其他什么?现在我再次添加了这个变量,一切正常。
    • 我又检查了一遍,是的,这三个变量在电脑重启后完全从pipenv中消失了。是每次上班前都导出,还是有别的办法?
    【解决方案2】:

    这是因为您可能使用 sqlalchemy.engine.url.URL 类来创建您的数据库 url。它不会给你一个字符串。而是&lt;class 'sqlalchemy.engine.url.URL'&gt; 的对象。

    解决方案

    为避免错误,请在正在使用的 migration/env.py 中找到配置

    current_app.config.get('SQLALCHEMY_DATABASE_URI')

    并将其替换为:

    str(current_app.config.get('SQLALCHEMY_DATABASE_URI'))

    迁移将正常工作。

    【讨论】:

      猜你喜欢
      • 2016-04-21
      • 2022-11-13
      • 2021-10-15
      • 2014-09-02
      • 2019-09-12
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      相关资源
      最近更新 更多