[Python] Python SQLAlchemy Update Operation Yielded Unexpected Result

Discussão em 'Python' iniciado por Stack, Janeiro 20, 2025.

  1. Stack

    Stack Membro Participativo

    In Python(FastAPI) SQlAlchemy(sqlite) Update Operation Yielded Unexpected Result. here the code

    # schemas.py
    class User(BaseModel):
    uid: int
    num: int

    # model.py
    class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    uid = Column(Integer, unique=True, index=True)
    num = Column(Integer)

    # crud.py
    def getdata(db: Session, user: int):
    return db.query(model.User).filter(model.User.uid == user).first() # output: uid: 0, id: 1, num: 50

    def updatedata(db: Session, user: schemas.User): # output: user = uid: 0, id: 1, num: 10
    nuser = db.query(model.User).filter(model.User.uid == user.uid).one_or_none() #output: uid: 0, id: 1, num: 10. # expect output: uid: 0, id: 1, num: 50?
    nuser.num -= user.num # output: nuser.num: 10, user.num: 10 = 0,
    # expect: 50-10=40
    db.add(nuser)
    db.commit()
    db.refresh(nuser)
    nuser1 = db.query(model.User).filter(model.User.uid == user.uid).one_or_none() # output: uid: 0, id: 1, num: 0
    return nuser1 # output: uid: 0, id: 1, num: 0

    # main.py
    @app.post("/test/{user}")
    def cal(user: int, db: Session = Depends(get_db)):
    userdata = crud.getdata(db, user=user) # output: userdata = uid: 0, id: 1, num: 50
    userdata.num = 10 # output: now userdata = uid: 0, id: 1, num: 10
    user = crud.updatedata(db, userdata)
    return user # output: uid: 0, id: 1, num: 0


    if in main.py crud.getdata(db, user=user) not called and manually provide the value when req then nuser = db.query(model.User).filter(model.User.uid == user.uid).one_or_none() working as expected.

    so the main problem is userdata.balance set to 10 or any value, nuser also set the same value rather then get the data from db.

    is this expected behavior? or problem in my code? can someone please explain what is problem here.

    I am newbie in python and stuff also not good in english so sorry if there any mistakes. Thanks

    Continue reading...

Compartilhe esta Página