在Flask sqlalchemy中订购一对多模型? - python

我正在尝试编写一个特定的查询,以允许用户优化其搜索。我与作者和书籍之间存在一对多的关系:

class Author(Model):
    id = Column(Integer, primary_key=True)
    name = Column(String)
    books = relationship('Book', backref='author', lazy='dynamic')

class Book(Model):
    id = Column(Integer, primary_key=True)
    title = Column(String)
    pages = Column(Integer, default=0)
    is_published = Column(Boolean, default=False)
    author_id = Column(Integer, ForeignKey('author.id'))

如何在Flask sqlalchemy中构建适当的查询来回答此问题:

“给我所有至少有一本已出版的书的作者,并按照书中从最短到最长的页数对所有作者进行排序。”

我认为作者只会按照最短的书来排序,而不管他们是否有一本更长的书。

一个例子:

Bob
   book A: 62 pages, published
   book B: 10 pages, published

Alice 
   book C: 100 pages, published
   book D: 1 pages, published

Carol
   book E: 3 pages, NOT-published
   book F: 1000 pages, published

Eve
   book G: 2000 pages, NOT-published

该查询将按以下顺序返回作者:

  [ Alice, Bob, Carol ]

由于爱丽丝的出版时间最短(1页),鲍勃的出版时间第二短(10页),而卡罗尔的出版时间最长(1000页)。夏娃没有被提及是因为她没有任何出版的书籍。

参考方案

尝试以下方法:

session.query(Author)
    .join(Author.books)
    .filter(Book.is_published == True)
    .group_by(Author.id)
    .order_by(func.min(Book.pages))    

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Flask-RESTful-返回自定义响应格式 - python

我已经按照以下Flask-RESTful文档定义了自定义响应格式。app = Flask(__name__) api = restful.Api(app) @api.representation('application/octet-stream') def binary(data, code, headers=None): resp =…

Flask_SQLAlchemy无法像SQLAlchemy那样反映数据库 - python

我正在尝试使用python-Flask将Foreigner Database连接到Flask_SQLALchemy应用我到处都看过,包括FLASK_SQLALCHEMY official doc 过去4天里,我一直在Internet上到处寻找FLASK_SQLALCHEMY中没有ORM库的任何教程,但运气不佳我一直在查看SQLAlchemy Reflecti…

在Flask Web应用程序中从Python 2 md5库正确迁移到Python 3 hashlib以进行CCAvenue集成 - python

我正在尝试在Flask 0.12.2,Python 3.6.1中集成第三方支付网关(CCAvenue)。第三方提供的参考代码使用了已弃用的库md5来加密文本。我已经在Existing Solution in Django中找到了迁移的解决方案。但是,我需要相同的Flask版本代码。 python参考方案 我有解决方案,这是代码from Crypto.Ciph…

带后台线程的烧瓶应用程序 - python

我正在创建一个flask应用程序,对于一个请求,我需要运行一些长时间运行的作业,而无需在UI上等待。我将创建一个线程并将消息发送到UI。该线程将计算并更新数据库。但是,UI在提交后会看到一条消息。下面是我的实现,但是它正在运行线程,然后将输出发送到我不喜欢的UI。如何在后台运行此线程?@app.route('/someJob') def …