Python 使用视图中的函数更新Flask中的数据库模型
我是flask的新手,我正在尝试根据flask视图中的不同用户事件更新模型。我可以在shell中访问它,并可以提取一些存储有数据的字段。但我需要根据某些用户事件从视图中更新模型。以下是我的模型文件: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
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),则将创建一个新包。