테이블의 특정 열만 쿼리하고 flask-sqlalchemy의 목록으로 일대 다 관계가있는 필드를 반환하려면 어떻게해야합니까? 내가Flask-SQLAlchemy : 특정 열만 쿼리하고 목록으로 일대 다 관계를 반환합니다.
results = Article.query.all()
편집 작업을 수행 할 때
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'))
)
:
이
내 models.py입니다 그때 매크로에 넘겨되는 jinja2 템플릿에results
을 전달하고있다 :
{% for r in results %}
{% macros.render_article(r) %}
{% endfor %}
{% macro render_article(result) %}
{% for a in result.authors %}
...render something
{% endfor %}
{% endmacro %}
이제는 Article.full_te를 제외하도록 원래 쿼리를 제한하고 싶습니다. xt 컬럼은 매우 오래 걸리고 나중에 AJax 호출로 전체 텍스트를로드 할 수 있기 때문에. 쿼리 할 특정 열을 지정할 수 있다는 것을 알고 있습니다.
results = Article.query.with_entities(
Article.id,
Article.title,
Article.authors
).all()
그러나 이것은 작동하지 않습니다. 쿼리는 아무 것도 반환하지 않으며 오류도 throw하지 않습니다.
는 나는 그렇게 같이 참여했습니다 : 잘 작동results = Article.query.join(Article.authors).with_entities(Person.id, Person.full_name)
을 ...,하지만 난 다음 다른 열을 지정할 수 없습니다.
어떻게 두 쿼리를 결합 할 수 있습니까?
당신은'제에 가입하고 '에'기사'. 그게 의도적 인거야? – ACV
질문에 약간의 문제가 있다고 생각합니다. 한 가지만 말하면,'results = Article.query.all()'및'for name in results.authors :'의 결과를 재현 할 수 없습니다.'이 경우'results'는 객체의 목록입니다. Article 클래스의 인스턴스. 'results.authors'는 작동하지 않아야합니다. 결과 세트에서 하나의 객체를 가져 오는 경우, 그 객체는'authors' 속성을 갖게 될 것입니다.이 속성은 아마도 기본적으로리스트 일 것입니다. 필자가 생각한 것은 지연된 역 참조를 정의하는 것입니다. 그래서'.authors'는 조인 된 결과 목록 대신 필터링 할 수있는 쿼리를 반환합니다. – sytech
@sytech : 맞습니다. 간결함을 위해 저는 충분히 명확하지 않았습니다. 실제로'결과 '를 jinja2 템플릿에 넘겨주고, for-loop 내부의 매크로에 전달합니다. 매크로에서'results.authors'를 하나씩 출력합니다. 그에 따라 질문을 수정하겠습니다. – synul