【问题标题】:Connect Postgres DB and Models (Django & Flask) in Docker containers在 Docker 容器中连接 Postgres DB 和模型(Django 和 Flask)
【发布时间】:2020-02-20 09:32:59
【问题描述】:

我有带有 Flask 和 Django 容器的 Docker 容器应用程序。 Django容器和Flask Container之间可以共享数据库吗?

 django: &django
  ...
  depends_on:
  - postgres

 flask:
  ...
  ports:
    - "5090:5090"
  ...
  - postgres
  links:
  - postgres

 postgres:
   build:
   ...
   env_file:
  - ./.envs/.local/.postgres

模型在 Django 应用程序中。所以,我需要使用 Postgres 数据库在 Flask 应用程序中进行登录。问题是,我只想使用到数据库的连接,我不需要在 Flask 中做模型。

我使用了 Sqlalchemy 方法:

  if form.validate_on_submit():
    query = session.query(User)
    login = User.query.filter(username=form.username.data).first()
    if login is not None:
        print(login)
        return redirect(url_for('index'))
   return render_template('login.html', form=form)

我尝试了 Panda 方法:

     if form.validate_on_submit():
    sql = "SELECT * from users WHERE username = '{0}'".format(form.username.data)
    login = pd.read_sql_query(sql,SQLALCHEMY_DATABASE_URI)
    if login is not None:
        print(login)
        return redirect(url_for('index'))

但是两种情况下的错误都是一样的,我需要做一个关系,所以,它是一个迁移,在 Flask 中。

   **sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "users"** 

这是我的database.py:

     ...
     SQLALCHEMY_DATABASE_URI = 'postgres://%s:%s@%s:%s/%s' % (user, pwd, host, port, db)
     SQLALCHEMY_TRACK_MODIFICATIONS = os.environ.get('SQLALCHEMY_TRACK_MODIFICATIONS')

     db_session = scoped_session(sessionmaker(autocommit=False,
                                     autoflush=False,
                                     bind=engine))
     def init_db():
     ...

【问题讨论】:

    标签: python postgresql docker flask


    【解决方案1】:

    当然可以在多个容器之间共享数据库。我不会,但这是可能的。

    我在上面看到的错误似乎是用户表没有您期望的名称。您可以使用一些数据库 gui 或 psql cli 工具进行验证。除非您明确将其命名为 users,否则它将使用 <app_name>_<model_name> 约定命名。如果您使用默认的 django User 模型,那么实际的 db 表将被命名为 auth_user

    旁注:您当然可以继续这种方式,但是,如果您有时间投资解决这个问题:我强烈建议您研究 OAUTH+OIDC、JWT 以及如何使用它们完成 SSO。

    【讨论】:

    • 是的,老实说,最后我以这种方式离开了,我正在尝试将 Flask 模板与 DRF 连接起来。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2021-07-18
    • 2021-11-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多