如何仅查询表的某些列并将具有一对多关系的字段作为flask-sqlalchemy中的列表返回?
这是我的models.py:
class Article(db.Model):
__tablename__ = 'articles'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
full_text = db.Column(db.Text)
authors = relationship('Person',
secondary=AssArtPer,
backref='articles'
)
class Person(db.Model):
__tablename__ = 'persons'
id = db.Column(db.Integer, primary_key=True)
full_name = db.Column(db.String(255))
AssArtPer = db.Table('ass_articles_persons',
db.Column('art_id', db.Integer, db.ForeignKey('articles.id')),
db.Column('per_id', db.Integer, db.ForeignKey('persons.id'))
)
当我这样做时
results = Article.query.all()
编辑:然后我将results
传递给jinja2模板,该模板将其交给宏:
{% for r in results %}
{% macros.render_article(r) %}
{% endfor %}
{% macro render_article(result) %}
{% for a in result.authors %}
...render something
{% endfor %}
{% endmacro %}
现在,我想限制原始查询以排除Article.full_text列,因为它需要很长时间,我可以稍后使用ajax调用加载全文。我知道我可以指定要查询的某些列:
results = Article.query.with_entities(
Article.id,
Article.title,
Article.authors
).all()
但这不起作用。查询不会返回任何内容,也不会抛出错误。
我试过这样的联接:
results = Article.query.join(Article.authors).with_entities(Person.id, Person.full_name)
...工作正常,但我不能指定任何其他列。
如何组合这两个查询?
答案 0 :(得分:-1)
基于this question我认为以下内容可能有效:
results = (
Article.query.join(Person).
with_entities([
Article.id,
Article.title,
Article.authors,
Person.id,
Person.full_name]).all()
(如果不是,请告诉我,我有另一个想法。)