Я начал пользоваться фреймворком FastAPI и подключил к нему SQLAlchemy, что в общем-то и не очень радует потому что я не люблю подключать к своему коду лишние абстракции, но исходя из мнений в интернете и того, что сами создатели фреймворка в примерах рекомендуют эту ORM решил все-таки воспользоваться ей.
Ошибка следующая:
asyncpg.exceptions.DataError: invalid input for query argument $1: 'lalala@gmail.com' (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
a bytes-like object is required, not 'str', т.е. где-то ожидается bytes-like object, а приходит строка. Поиск по ошибке кинул на https://stackoverflow.com/questions/33054527/typeerror-a-bytes-like-object-is-required-not-str-when-writing-to-a-file-in Там ошибка именно при записи. У тебя ошибка при записи вылетает? – Aleksey Oct 31 '20 at 08:39