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