【问题标题】:Flask-SQLAlchemy get rows with non-zero countFlask-SQLAlchemy 获取非零计数的行
【发布时间】:2016-03-12 16:47:59
【问题描述】:

我的数据库中有以下两个模型:

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True)
    websites = db.relationship('Website', backref='category', lazy='dynamic')

class Website(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    url = db.Column(db.String(1000), nullable=False)
    class_name = db.Column(db.String(50), nullable=False)

我现在要做的是编写一个表达式来加载与一个或多个网站相关联的所有类别。在 SQL 中,我可以使用joinhaving 来实现这一点,但是我无法将其转换为 SQLAlchemy。

我首先尝试导入和使用func,但后来意识到它没有在 Flask-SQLAlchemy 中定义。我的下一次尝试是Category.query.having(Category.websites.count() > 1).all(),但这给了我一个错误AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' object associated with Category.websites has an attribute 'count'。这样做的正确方法是什么?

任何帮助将不胜感激!

【问题讨论】:

  • 您的属性称为websites,而不是wesbites
  • @dirn 非常感谢!不过,我仍然收到错误消息。已更新我的问题。

标签: flask flask-sqlalchemy


【解决方案1】:

我相信您仍然可以将 join 与 group_by() 和 having() 函数一起使用。这是一个例子taken from the docs for having() that might be what you're looking for:

q = session.query(Website.id).\
            join(Website.category_id).\
            group_by(Category.id).\
            having(func.count(Website.url) > 0)

【讨论】:

  • 不能用 Flask-SQLAlchemy 做吗?我不想使用 SQLAlchemy,因为以后可能会因为不知道我的应用程序而导致问题/
  • Flask-SQLAlchemy 只是 SQLAlchemy 的一个包装器。 Website.query 只是包装会话的一种便利。直接使用会话没有什么问题。
猜你喜欢
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多