Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用视图中的函数更新Flask中的数据库模型_Python_Flask_Flask Sqlalchemy - Fatal编程技术网

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

Python 使用视图中的函数更新Flask中的数据库模型,python,flask,flask-sqlalchemy,Python,Flask,Flask Sqlalchemy,我是flask的新手,我正在尝试根据flask视图中的不同用户事件更新模型。我可以在shell中访问它,并可以提取一些存储有数据的字段。但我需要根据某些用户事件从视图中更新模型。以下是我的模型文件: class Package(db.Model): __tablename__ = 'package' id = db.Column(db.Integer, primary_key=True, autoincrement=True) student_id = db.Colum

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

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
如何在视图中更新这些内容,例如:

from models import Package
@app.route('/somelink', methods=['POST'])
def somefunc():
    if studentdidsomething:
         planname = 'somename'
         db.session.commit(planname)


return render_template('sometemplate.html')

我需要直接处理数据库表,这就是为什么我会感到困惑的原因,因为flask有很多表单风格。Wtf形态、炼金术形态和正义形态。请告知。

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

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')
来自模型导入包
@app.route('/somelink/',默认值={'package_id':None},方法=['POST'])
def somefunc(包id):
如果包_id为无:
package=package()
其他:
package=package.query(package.id=package\u id).first\u或\u 404()
如果学生做了某事:
package.planname='somename'
db.session.add(包)
db.session.commit()
返回render_模板('sometemplate.html')

在这里,您可以使用或不使用包id调用somelink。如果您在不使用包id的情况下调用,将创建新的包。否则将使用现有的包。

所以我只需要一个引用来创建/更改所有模型字段详细信息?最后两句话也让我对你的文章感到困惑。你的意思是如果我在@app.route中调用package_id,那么将创建现有的包?最后一个问题是,它会决定当前登录用户的更改吗?如果您向url
/somelink/12
发出post请求,您将更改id为12的包。如果您向url
/somelink/
发出post请求(您没有传递包id),则将创建一个新包。