Каким образом составить запрос в SQLAlchemy для PostgreSQL?
Как добавить схему в запросы SQLAlchemy? Я так понимаю ошибка в том, что при запросе нужно указывать схему и таблицу users.users
в PostgreSQL, но как это сделать в SQLAlchemy ORM?
Код запроса
async def new_user(db: Session):
user = Users(id=1, email="user@example.ru", hashed_password="lasdfhi18c74i6criuytkyutvjtfvj", api_key="12345sakhdjgfsadkhfl264ocb8")
db.add(instance=user)
db.commit()
Схема базы данных
class Users(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(primary_key=True, unique=True)
email: Mapped[str] = mapped_column(unique=True)
hashed_password: Mapped[str]
api_key: Mapped[str] = mapped_column(unique=True)
services: Mapped["Notifications"] = relationship(back_populates="owner")
class Notifications(Base):
__tablename__ = "notifications"
api_key: Mapped[str] = mapped_column(ForeignKey(Users.api_key), primary_key=True, unique=True)
email: Mapped[str] = mapped_column(unique=True)
telegram_id: Mapped[int] = mapped_column(unique=True)
vk_domain: Mapped[str] = mapped_column(unique=True)
website: Mapped[str] = mapped_column(unique=True)
owner: Mapped["Users"] = relationship(back_populates="services")
Трассировка стека
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 407, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\fastapi\applications.py", line 270, in __call__
await super().__call__(scope, receive, send)
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\starlette\applications.py", line 124, in __call__
await self.middleware_stack(scope, receive, send)
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
raise exc
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
raise exc
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "C:\Users\maksi\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 222, in __aexit__
await self.gen.athrow(typ, value, traceback)
File "C:\Users\maksi\PycharmProjects\team_project\venv\Lib\site-packages\fastapi\concurrency.py", line 36, in contextmanager_in_threadpool
raise e
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) ОШИБКА: отношение "users" не существует
LINE 1: INSERT INTO users (id, email, hashed_password, api_key) VALU...
^
[SQL: INSERT INTO users (id, email, hashed_password, api_key) VALUES (%(id)s, %(email)s, %(hashed_password)s, %(api_key)s)]
[parameters: {'id': 1, 'email': 'user@example.ru', 'hashed_password': 'lasdfhi18c74i6criuytkyutvjtfvj', 'api_key': '12345sakhdjgfsadkhfl264ocb8'}]
(Background on this error at: https://sqlalche.me/e/20/f405)
Источник: Stack Overflow на русском