Операция обновления Python SQLAlchemy дала неожиданный результатPython

Программы на Python
Ответить
Anonymous
 Операция обновления Python SQLAlchemy дала неожиданный результат

Сообщение Anonymous »

В Python(FastAPI) операция обновления SQlAlchemy(sqlite) дала неожиданный результат.
вот код

Код: Выделить всё

# 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
если в main.py crud.getdata(db, user=user) не вызывается и вручную укажите значение при запросе, то nuser = db.query(model.User) .filter(model.User.uid == user.uid).one_or_none() работает как положено.
поэтому основная проблема - установлен userdata.balance до 10 или любой value, nuser также устанавливает то же значение, а не получает данные из базы данных.
это ожидаемое поведение? или проблема в моем коде? Может кто-нибудь объяснить, в чем здесь проблема.
Я новичок в Python, и я тоже не очень хорошо говорю по-английски, поэтому извините, если есть какие-либо ошибки. Спасибо

Подробнее здесь: https://stackoverflow.com/questions/793 ... ted-result
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»