Ich bin sehr neu auf SQLAlchemy und wie Sie Ich habe 3 Modelle sehen:SQLAlchemy Zählfunktion für verschachtelte Join subquery
categories = db.Table(
'categories',
db.Column('post_id', db.Integer, db.ForeignKey('post.id')),
db.Column('category_id', db.Integer, db.ForeignKey('category.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
nickname = db.Column(db.String(64), index=True, unique=True)
email = db.Column(db.String(120), index=True, unique=True)
posts = db.relationship('Post', backref='author', lazy='dynamic')
about_me = db.Column(db.String(140))
last_seen = db.Column(db.DateTime)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.String(140))
timestamp = db.Column(db.DateTime)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
categories = db.relationship("Category",
secondary="categories",
backref="posts")
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100))
kann ich zählen, wie viele Post jeder Benutzer durch eine Unterabfrage wie folgt hat:
stmt = db.session.query(models.Post.user_id, func.count('*').label('post_count')).group_by(models.Post.user_id).subquery()
db.session.query(models.User, stmt.c.post_count).outerjoin(stmt, models.User.id==stmt.c.user_id).order_by(models.User.id)
aber ich kann nicht herausfinden, die richtige Abfrage zu berechnen, wie viele Kategorien jeder Benutzer hat.
danke für Ihre Antwort, aber das Abfrageergebnis ist falsch, zum Beispiel habe ich einen Benutzer, der an drei Kategorien teilnehmen, aber Ihre Abfrage gibt zwei für diesen Benutzer zurück. – nim4n
Ich habe Ihren Code von "stmt.c.post_count" in "stmt.c.category_count" geändert und es hat funktioniert! Vielen Dank für Ihre Hilfe – nim4n
Sie haben vergessen, das Attribut in der letzten Abfrage hinzuzufügen/zu ändern, froh, dass Sie es selbst aussortiert haben. –