Соедините Postgres DB и Модели (Django & Flask) в Docker контейнерах - PullRequest
1 голос
/ 20 февраля 2020

У меня есть Docker Приложение для контейнеров с Flask и Django контейнерами. Возможно разделить базу данных между Django контейнером и Flask контейнером?

 django: &django
  ...
  depends_on:
  - postgres

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

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

Модели находятся в Django приложении. Итак, мне нужно выполнить вход в приложение Flask, используя базу данных Postgres. Проблема в том, что я хочу использовать только соединение с базой данных, мне не нужно делать модели в 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"** 

Это моя база данных.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():
     ...

1 Ответ

1 голос
/ 20 февраля 2020

Безусловно, можно совместно использовать базу данных между несколькими контейнерами. Я бы не стал, но, тем не менее, это возможно.

Ошибка, которую я вижу выше, заключается в том, что таблица пользователя не имеет ожидаемого имени. Вы можете проверить, используя некоторую базу данных gui или psql cli. Если вы явно не назвали его users, он будет назван с использованием соглашения <app_name>_<model_name>. Если вы используете модель django User по умолчанию, тогда фактическая таблица БД будет иметь имя auth_user.

. Примечание: вы можете определенно продолжить этот путь, но, если у вас есть время, чтобы инвестируйте в проблему: я настоятельно рекомендую вам взглянуть на OAUTH + OID C, JWT и как выполнить sh SSO, используя их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...