使用SQLAlchemy Flask和sqlite3更新Row

时间:2018-03-28 10:22:27

标签: python sqlite flask sqlalchemy

我正在尝试使用SQLAlchemy和flask更新用户密码,但更改未被提交

change_admin_password = Blueprint('change_admin_password', __name__)
@change_admin_password.route('/api/users/password', methods = ['POST'])
@auth.login_required
def show():
    username = request.json.get('username')
    new_password = request.json.get('new_password')

    if username is None or new_password is None:
        abort(400)
    if username != app.config['ADMIN_USER']:
        abort(400)
    admin = User.query.filter_by(username=username).first()
    admin.hash_password(new_password)
    db.session.commit()
    return (jsonify({'success': True, 'message': 'Admin password changed'}), 201)

在User类中我有

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), index=True)
    password_hash = db.Column(db.String(64))
    roles = db.Column(db.String(128))
    is_active = db.Column(db.Boolean, default=True)
    created_at = db.Column(db.DateTime, nullable=False, server_default=func.now())
    updated_at = db.Column(db.DateTime, nullable=False, server_default=func.now(), onupdate=func.now())

    def hash_password(self, password):
        self.password_hash = pwd_context.encrypt(password)

    def verify_password(self, password):
        return pwd_context.verify(password, self.password_hash)

    def __repr__(self):
        return '<User %r>' % self.username

更新: 如果我在提交之前尝试添加新用户,则新用户将添加到表中,但管理员仍具有旧密码

admin = User.query.filter_by(username=username).first()
admin.hash_password(new_password)
user = User(username='admintest')
user.hash_password(new_password)
db.session.add(user)
db.session.commit()

1 个答案:

答案 0 :(得分:0)

我从run.py中删除了db的初始化,并从我所有模型中的一个地方导入了db。

所以在sqlalchemy_declaration我有

db = SQLAlchemy()

和其他模型

from sqlalchemy_declarative import db

然后我用

初始化应用程序

db.init_app(app)