使用SQLAlchemy在Flask应用程序内无法调用BaseQuery对象

时间:2017-10-10 02:24:49

标签: python mysql flask flask-sqlalchemy

Flask Web开发新手:我尝试使用SQLAlchemy作为我的ORM在Flask应用程序中查询MySQL数据库。

每次有GET请求时,都会从python函数生成一个分数,并且总分(即列'分数的总和)将以JSON形式返回给模板。

我得到了一个" TypeError:' BaseQuery'对象不可调用"当像这样使用sum func时:

all_points = [Play.query(func.sum(Play.points))]

当我尝试使用.get()时,它会在模板(即对象对象),[对象对象]中放弃一些时髦的东西,但至少会返回一些东西:

all_points = [Play.query.get(1)]

不确定我的错误是什么:查询是错误的还是我将对象添加到数据库的方式不正确?

// db model

class Play(db.Model):

__tablename__ = "scoring"

rounds = db.Column(db.Integer, primary_key=True)
points = db.Column(db.Integer)

def __init__(self, points):
    self.points = points

// Marshmallow架构:

class PlaySchema(ma.Schema):
class Meta:
    fields = ('rounds','points')

play_schema = PlaySchema()
plays_schema = PlaySchema(many=True,only=('rounds', 'points'))

//从此函数返回得分:

score = dice_score(d1,d2,d3,d4,d5)

//对于db的每个GET请求条目:

db.create_all()
round_score = Play(score)
db.session.add(round_score)
db.session.commit()

//有问题的查询:

all_points = [Play.query(func.sum(Play.points))]

//最后将结果传递给带有转储(marshmallow)的模板:

dump_score = plays_schema.dump(all_points)
return render_template('main.html',data_get=data_get)

1 个答案:

答案 0 :(得分:0)

Play.query无法调用,请改用db.session.query(...)

db.session.query(func.sum(Play.points))