DOCKER:错误:第13个字符中不存在关系用户 [英] Docker: ERROR: relation "users" does not exist at character 13

查看:0
本文介绍了DOCKER:错误:第13个字符中不存在关系用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对接我的应用程序,这些应用程序是用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"]

起初我认为我的代码有问题,但当我在系统上本地运行它时,它工作得很好。

另外,我对docker还很陌生。

我尝试了不同的在线解决方案,但都不起作用。

我认为它连接到了错误的名为postgres的表,但我找不到背后的原因。

更新: 我注意到的是,我的邮寄服务器有三个数据库: -Fastapi -fast api-项目

  • Postgres 我想要连接的是Fastapi,但我认为它正在连接到Postgres One,而我不记得创建了那个数据库。 此外,postgres数据库没有表,因此它找不到用户表是有道理的。 但问题是我如何更改数据库?

如果您需要任何其他信息,请告诉我。

提前谢谢!

推荐答案

按照Sanjeev的教程,我遇到了同样的问题。根据您的设置,您连接的数据库是正确的,问题是它没有表。这可以通过Alembic解决。
docker-compose.yml中,在api:下添加行:

command: bash -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload"

就是这样!

要检查是否已成功创建表,请在项目文件夹中打开一个终端,然后执行以下操作:

  • 运行docker编写

    docker-compose up -d
    
  • 找到PG容器名称,在您的情况下应该类似于fastapi-postgres-1,然后在PG容器中启动bash会话

    docker ps
    docker exec -it fastapi-postgres-1 bash
    
  • 从此处访问psql并找到您的数据库名称,在您的情况下应该是fastapi

    su - postgres
    psql
    l
    
  • 访问您的数据库并检查表是否已创建

    c fastapi
    dt
    

如果结果是这样,您就可以开始了。

              List of relations
 Schema |      Name       | Type  |  Owner   
--------+-----------------+-------+----------
 public | alembic_version | table | postgres
 public | posts           | table | postgres
 public | users           | table | postgres
 public | votes           | table | postgres
(4 rows)

这篇关于DOCKER:错误:第13个字符中不存在关系用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆