2017-10-10 3 views
-1

Nouveau développement Web Flask: j'essaie d'interroger une base de données MySQL en utilisant SQLAlchemy comme ORM dans une application Flask.Objet BaseQuery non appelable dans une application Flask à l'aide de SQLAlchemy

Chaque fois qu'il y a une requête GET, un score est généré à partir d'une fonction python et un score total (c'est-à-dire la somme des points de colonne) est renvoyé dans JSON au modèle.

je reçois un « TypeError: objet « BaseQuery » est pas appelable » lorsque vous utilisez somme func comme ceci:

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

Lorsque je tente l'aide d'un .get() il est deplaying quelque chose branché dans le modèle (c.-à- objet objet], objet [objet]), mais au moins il retourne quelque chose:

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

Je ne sais pas quel est mon erreur: la requête est mauvaise ou la façon dont j'ajouter l'objet à la base de données incorrecte?

// modèle db

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 

// schéma Guimauve:

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

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

// score est de retour de cette fonction:

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

// pour chaque requête GET entrée à la db comme:

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

// requête problématique:

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

// finalement le résultat est transmis au modèle avec vidage (guimauve):

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

Répondre

0

Play.query n'est pas appelable, utilisez db.session.query(...) à la place:

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