Возбуждается ошибка asyncpg при попытке достать из базы данных объект по полю
Я начал пользоваться фреймворком FastAPI и подключил к нему SQLAlchemy, что в общем-то и не очень радует потому что я не люблю подключать к своему коду лишние абстракции, но исходя из мнений в интернете и того, что сами создатели фреймворка в примерах рекомендуют эту ORM решил все-таки воспользоваться ей.
Ошибка следующая:
asyncpg.exceptions.DataError: invalid input for query argument $1: '[email protected]' (a bytes-like object is required, not 'str')
Файл db.py пакета storage:
from databases import Database
import sqlalchemy
address = ""
storage = Database(address)
metadata = sqlalchemy.MetaData()
consumers = sqlalchemy.Table(
"consumers",
metadata,
sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
sqlalchemy.Column("first_name", sqlalchemy.String),
sqlalchemy.Column("last_name", sqlalchemy.String),
sqlalchemy.Column("email", sqlalchemy.String, unique=True),
sqlalchemy.Column("password", sqlalchemy.String)
)
engine = sqlalchemy.create_engine(address)
metadata.create_all(engine)
Мой код получения, размещенный в пакете storage в файле utils.py:
from .db import consumers, storage
async def get_user_by_email(email: str):
return await storage.fetch_one(
consumers.select().where(consumers.c.email == email)
)
Файл models.py из пакета authentication:
from pydantic import BaseModel, EmailStr
class CreateConsumer(BaseModel):
email: EmailStr
first_name: str
last_name: str
password: str
confirm_password: str
Файл routes.py из пакета authentication:
from fastapi import APIRouter
from .models import CreateConsumer
from storage.utils import get_user_by_email
authentication = APIRouter()
@authentication.post('/sign-up')
async def sign_up(user: CreateConsumer):
if await get_user_by_email(user.email):
pass
Ответы (1 шт):
Автор решения: Crazy Theory
→ Ссылка
Решил проблему заменив поле email в таблице text'ом вместо char'а. Видимо какое-то несоответствие в типах данных происходило.