suchen

Heim  >  Fragen und Antworten  >  Hauptteil

python - Wie paginiere ich die Ergebnisse einer flask sqlalchemy Many-to-many-Abfrage?

Ich verwende Flask, um einen Blog zu erstellen, während ich Flask lerne (Ein Artikel kann mehrere Tags haben, und ein Tag kann mehreren Artikeln entsprechen, daher folge ich hier der Viele-zu-Viele-Beziehung), die mit der Paginierungsmethode von flask-sqlalchemy einhergeht kann nur flask_sqlalchemy.BaseQuery-Objekte für die Paginierung unterstützen. Ich habe jedoch Tags in einer Multipaar-Beziehung verwendet, um alle mit dem Tag verknüpften Artikelobjekte zu finden, daher ist eine Paginierung nicht möglich. . . Was soll ich tun, wenn ich jetzt paginieren möchte?

Soll ich jetzt selbst eine Paginierung schreiben? Ich hoffe, dass einige wohlmeinende Experten mir einen Rat zur allgemeinen Idee geben können.
Beispiel:

#多对多关系中的两个表之间的一个关联表
tags = db.Table('post_tags',
    db.Column('post_id',db.Integer,db.ForeignKey('posts.id')),
    db.Column('tag_id',db.Integer,db.ForeignKey('tag.id'))
)

# 发表文章模型
class Post(db.Model):
    __tablename__ = 'posts'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255))
    body = db.Column(db.Text())
    body_html = db.Column(db.Text())
    created = db.Column(db.DateTime)

    author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    comments = db.relationship('Comment', backref='post',lazy='dynamic')  # 关联评论
    tags = db.relationship('Tag',secondary=tags,backref=db.backref('posts',lazy='dynamic'))#多对多关联

    def __repr__(self):
        return "<post_id={0}>".format(self.id)
        
#标签
class Tag(db.Model):
    __tablename__ = 'tag'
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String(255))\


    def __repr__(self):
        return "{0}".format(self.title)

三叔三叔2732 Tage vor1390

Antworte allen(1)Ich werde antworten

  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:24:47

    我表示分页无压力啊 完全可以用分页啊

    >>> r=Role.query.get(1)
    >>> r
    manager
    >>> r.users
    <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x7f5ae257a510>
    >>> r.users.paginate(1, 20, None)                
    <flask_sqlalchemy.Pagination object at 0x7f5ae1829150>

    User 和 Role 就是多对多的,没发现楼主说的问题。

    Antwort
    0
  • StornierenAntwort