#python #python-3.x #sqlalchemy #fastapi
#питон #python-3.x #sql — алхимия #fastapi
Вопрос:
Я пытаюсь создать product
API, но я сталкиваюсь с этой проблемой после отправки запроса в API:
new_product = models.products(name=requests.name, price=requests.price)
AttributeError: module 'fastapi.requests' has no attribute 'name'
Это мой код:
main.py
from fastapi import FastAPI, Depends, requests
from typing import Optional
import schemas, models
from database import engine, SessionLocal
from sqlalchemy.orm import Session
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post('/product')
def create(product: schemas.Products, db : Session = Depends(get_db)):
new_product = models.products(name=requests.name, price=requests.price)
db.add(new_product)
db.commit()
db.refresh(new_product)
return new_product
models.py
from sqlalchemy import Column, Integer, String
from database import Base
class products(Base):
__tablename__ = 'products'
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
price = Column(Integer)
database.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQL_URL = 'sqlite:/// product.db'
engine = create_engine(SQL_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
Base = declarative_base()
schemas.py
from pydantic import BaseModel
class Products(BaseModel):
name: str
price: int
Ответ №1:
Если вы пытаетесь получить данные , отправленные в конечную точку API, вы должны использовать product.name
and product.price
вместо requests.XXX
.
Вы импортируете requests
из FastAPI ( from fastapi import ... requests
), и это совершенно не связано с вашим API!
Ответ №2:
Как говорит Джейсон, лучше получать информацию из схемы, но если вы хотите, чтобы весь запрос включал тело, заголовки… и т.д. вам не нужно запрашивать никаких запросов
from fastapi import Request
@app.post("/")
async def fast_service(request: Request):
body =await request.body()
return