Докер: ОШИБКА: отношение «пользователи» не существует в символе 13

#python #postgresql #docker #fastapi

#питон #postgresql #докер #быстрый переход

Вопрос:

Я пытаюсь докеризировать свое приложение, созданное с помощью Python и FastAPI. Я успешно создал изображения и контейнер.

Я попытался закрепить свою базу данных postgres, и это было сделано успешно, пока я не попытаюсь создать нового пользователя. Это приводит к следующей ошибке:

 ERROR: relation "users" does not exist at character 13 10 02:24:37.586 UTC [71] STATEMENT: INSERT INTO users (email, password) VALUES ('sumitdadwal11@gmail.com', '$2b$12$VNya4IkKSGCuapswkJrh3u6POJVsdU2GSeIaV/ya4GprxNqEt5oim') RETURNING users.id  

В моем изображении приложения FastAPI отображается следующая ошибка:

 Traceback (most recent call last):   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context   self.dialect.do_execute(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute   cursor.execute(statement, parameters)  psycopg2.errors.UndefinedTable: relation "users" does not exist  LINE 1: INSERT INTO users (email, password) VALUES ('sumitdadwal11@g...   ^   The above exception was the direct cause of the following exception:   Traceback (most recent call last):   File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 376, in run_asgi   result = await app(self.scope, self.receive, self.send)   File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__   return await self.app(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 208, in __call__   await super().__call__(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__   await self.middleware_stack(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in __call__   raise exc   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in __call__   await self.app(scope, receive, _send)   File "/usr/local/lib/python3.9/site-packages/starlette/middleware/cors.py", line 84, in __call__   await self.app(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in __call__   raise exc   File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in __call__   await self.app(scope, receive, sender)   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in __call__   await route.handle(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle   await self.app(scope, receive, send)   File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app   response = await func(request)   File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 226, in app   raw_response = await run_endpoint_function(   File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 161, in run_endpoint_function   return await run_in_threadpool(dependant.call, **values)   File "/usr/local/lib/python3.9/site-packages/starlette/concurrency.py", line 39, in run_in_threadpool   return await anyio.to_thread.run_sync(func, *args)   File "/usr/local/lib/python3.9/site-packages/anyio/to_thread.py", line 28, in run_sync   return await get_asynclib().run_sync_in_worker_thread(func, *args, cancellable=cancellable,   File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 818, in run_sync_in_worker_thread   return await future   File "/usr/local/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 754, in run   result = context.run(func, *args)   File "/usr/src/app/./app/routers/user.py", line 18, in create_user   db.commit()   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1428, in commit   self._transaction.commit(_to_root=self.future)   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 829, in commit   self._prepare_impl()   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 808, in _prepare_impl   self.session.flush()   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3345, in flush   self._flush(objects)   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3485, in _flush   transaction.rollback(_capture_exception=True)   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__   compat.raise_(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 207, in raise_   raise exception   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 3445, in _flush   flush_context.execute()   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 456, in execute   rec.execute(self)   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/unitofwork.py", line 630, in execute   util.preloaded.orm_persistence.save_obj(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 244, in save_obj   _emit_insert_statements(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/orm/persistence.py", line 1221, in _emit_insert_statements   result = connection._execute_20(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1614, in _execute_20   return meth(self, args_10style, kwargs_10style, execution_options)   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection   return connection._execute_clauseelement(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1481, in _execute_clauseelement   ret = self._execute_context(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1845, in _execute_context   self._handle_dbapi_exception(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2026, in _handle_dbapi_exception   util.raise_(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 207, in raise_   raise exception   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1802, in _execute_context   self.dialect.do_execute(   File "/usr/local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 719, in do_execute   cursor.execute(statement, parameters)  sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "users" does not exist  LINE 1: INSERT INTO users (email, password) VALUES ('sumitdadwal11@g...   ^   [SQL: INSERT INTO users (email, password) VALUES (%(email)s, %(password)s) RETURNING users.id]  [parameters: {'email': 'sumitdadwal11@gmail.com', 'password': '$2b$12$5tcxP4b0hwVJpmHfyF10wuosYsdIxBkm1nhk1b1BZlLFZyCymodhK'}]  (Background on this error at: https://sqlalche.me/e/14/f405)  

Это мой файл docker-compose.yml:

 version: "3" services:   api:  build: .  ports:  - 8000:8000  # env_file:  # ./.env  environment:  - DATABASE_HOSTNAME=postgres  - DATABASE_PORT=5432  - DATABASE_PASSWORD=password123  - DATABASE_NAME=fastapi  - DATABASE_USERNAME=postgres  - SECRET_KEY=secretkeysecretkeysecretkeysecretkey  - ALGORITHM=HS256  - ACCESS_TOKEN_EXPIRE_MINUTES=30  postgres:  image: postgres  environment:  - POSTGRES_PASSWORD=password123  - POSTGRES_DB=fastapi    volumes:  - postgres-db:/var/lib/postgresql/data  volumes:  postgres-db:  

Это мой док-файл:

 FROM python:3.9.9  WORKDIR /usr/src/app  COPY requirements.txt ./  RUN pip install --no-cache-dir -r requirements.txt  COPY . .  CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]  

Сначала я подумал, что что-то не так с моим кодом, но он отлично работает, когда я запускаю его локально в своей системе.

Кроме того, я очень новичок в докере.

Я пробовал разные онлайн-решения, но ничего не вышло.

Я думаю, что это связано с неправильной таблицей с именем postgres, но я не могу найти причину этого.

ОБНОВЛЕНИЕ: Я заметил, что на моем сервере postgress есть три базы данных: -fastapi -fastapi-проект

  • postgres fastapi-это тот, к которому я хочу подключиться, но я думаю, что он подключается к postgres, и я не помню, как создавал эту базу данных. Кроме того, в базе данных postgres нет таблиц, поэтому имеет смысл, что она не может найти пользовательскую таблицу. Но вопрос в том, как мне изменить базы данных?

Пожалуйста, дайте мне знать, если вам понадобится какая-либо дополнительная информация.

Заранее спасибо!

Комментарии:

1. Вы уверены, что подключены к базе fastapi данных ? Либо вы находитесь в неверной базе данных, например , в базе данных обслуживания postgres , либо вы забыли создать таблицу user

2. Я думаю, что нахожусь в неправильной базе данных, то есть в postgres, и в ней вообще нет таблиц. Как мне это изменить? Я следую учебнику, и я сделал все точно так, как показано на рисунке. Дайте мне знать, если вам понадобится дополнительная информация.

3. если вы используете psql просто введите c fastapi и нажмите enter 🙂

4. Извините, я не понял, где я должен вводить c fastapi эту команду, потому что я на машине с Windows. Извините, если это что-то основное, я совершенно новый для докера.