使用视图中的函数更新Flask中的数据库模型

时间:2017-02-21 05:10:50

标签: python flask flask-sqlalchemy

我是新手,我正在尝试根据Flask视图中的不同用户事件更新模型。我可以在shell中访问它,并可以使用存储在其中的数据来提取一些字段。但我需要根据某些用户事件更新视图中的模型。以下是我的模型文件:

date

如何在以下视图中更新这些内容:

class Package(db.Model):
    __tablename__ = 'package'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    student_id = db.Column(db.Integer, ForeignKey('student_profile.id'))
    stripe_id = db.Column(db.String(45))
    student_email = db.Column(db.String(20))
    subscription_date = db.Column(db.DateTime, default=today)
    expiry_date = db.Column(db.DateTime, default=deadline)
    is_active = db.Column(db.Boolean, default=True)
    planname = relationship('Plan', backref=backref('package'))
    package_price = db.Column(db.Integer)
    coupon = db.Column(db.String(12))


    def __init__(self, id, 

        stripe_id, 
        student_email, 
        subscription_date,
        expiry_date,
        is_active, 
        planname, 
        package_price, 
        coupon):
            self.id = id
            self.student_id = student_id
            self.student_email = student_email
            self.subscription_date = subscription_date
            self.expiry_date = expiry_date
            self.is_active = is_active
            self.planname = planname
            self.package_price = package_price
            self.coupon = coupon

我需要直接使用数据库表,这就是为什么混淆,因为烧瓶有很多形式的味道。 Wtf形式,Alchemyforms和形式。请指教。

1 个答案:

答案 0 :(得分:0)

如果您的数据集不存在,但您需要创建表示数据集的模型实例,请根据您的用户事件设置属性并将实例添加到会话中。如果您已有现有数据集,则需要从数据库中查询它并更新所需的值。

from models import Package


@app.route('/somelink/<package_id>', default={'package_id': None}, methods=['POST'])
def somefunc(package_id):
    if package_id is None:
         package = Package()
    else:
         package = Package.query(Package.id=package_id).first_or_404()

    if studentdidsomething:
        package.planname = 'somename'
        db.session.add(package)
        db.session.commit()


    return render_template('sometemplate.html')

在这里你可以使用或不使用package_id来调用somelink。如果您在没有新包的情况下致电将被创建。否则将使用现有的包。