I do have 2 classes like these =>
class User(db.Model):
__tablename__ = "user"
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), unique=True, nullable=False)
password = db.Column(db.String(77), unique=False, nullable=False)
server_limit = db.Column(db.Integer, unique=False, nullable=False, server_default="4")
servers = db.relationship('Server', backref='owner', lazy='dynamic')
class Server(db.Model):
__tablename__ = "server"
server_id = db.Column(db.Integer, primary_key=True)
server_admin = db.Column(db.Integer, db.ForeignKey("user.user_id"))
server_port = db.Column(db.Integer, unique=False, nullable=False)
server_slot = db.Column(db.Integer, unique=False, nullable=False, server_default="32")
Now Im trying to get sum of server_slot column where for example user_id is 1.
I know there is questions with accepted answer about this but the difference is Im trying to do it with servers ( db.relationship
) that I assigned in my User class.
I did it with an alternative method that I created for User class =>
def used(self):
return db.session.execute("SELECT SUM(server.server_slot) FROM server WHERE server_admin={}".format(self.user_id)).scalar()
How can I do it using db.session.query()
?
Im looking for something that I can get it from db.session.query(User).all()
I dont want to use db.session.query(db.func.sum(Server.server_slot)).filter_by(server_admin=self.user_id).scalar()
Cause Im passing a list to my Flask page, The list is made by db.session.query(User).all()
so I can iterate over it using a for loop inside my Jinja2 Template and show each user information in a list like this =>
{% for user in users %}
<td>user.username</td>
<td>user.server_limit</td>
<td>...</td>
<td>user.used_slots()</td>
{% endfor %}
I can use user.servers.value("server_slot")
but it returns only first server's server_slot, I also tried to iterate over user.servers.all()
so I could sum their server_slot inside a nested loop, but I can't assign variables any value inside of a loop and get it outside the loop.
Let me know if my question is not clear enough (Cause I know it might be).