flask-restplus + SQLAlchemy-为什么我的put方法不能利用我的server_onupdate属性

时间:2019-07-31 02:26:35

标签: flask model flask-sqlalchemy flask-restplus

我第一次在Flask上开发Web应用程序后端。我正在从数据库中使用SQLAlchemy。我有一个简单的用户类,除了updated_at DateTime字段外,大多数情况下都可以正常工作。看起来是这样的:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    password = db.Column(db.String(50))
    email = db.Column(db.String(120), unique=True)
    created_at = db.Column(db.DateTime, server_default=db.func.now())
    updated_at = db.Column(db.DateTime, server_default=db.func.now(), server_onupdate=db.func.now())

我的@app.route('/users)中有一个post方法,该方法可以按预期方式与在数据库中自动填充的update和created_at字段一起使用:

def post(self): #Creates a new user
    new_user = User(
        username=api.payload['username'],
        password=api.payload['password'],
        email=api.payload['email'],
    )

    db.session.add(new_user)
    db.session.commit()

    # user_schema.dump(new_user)

    return {'message': 'New user {} was created'.format(api.payload['username'])}, 201

现在,这是我放置在为与单个用户相关的端点app.route(/users/<user_id>)指定的路由上的put函数。根据要求,我希望在上述用户模型中利用server_onupdate=db.func.now()属性。当我发出请求时,其他所有字段都正确更新了,这不会发生。

def put(self, user_id):
    user = User.query.filter_by(id=user_id).first()

    if not user:
        return {'message': 'User does not exist'}

    user.id = user.id
    user.password = api.payload['password']
    user.email = api.payload['email']

    db.session.commit()

    return {'message': 'User {} has been updated'.format(user.username)}

我可以向user.updated_at = datetime.datetime.now()这样的User对象添加一行,但这看起来像是在作弊,并且我想利用SQLAlchemy字段属性。

让我知道您是否有任何想法,或者您是否可以了解我可能做错了什么。非常感谢!

0 个答案:

没有答案