>  기사  >  백엔드 개발  >  Python 플라스크 다대다 테이블 쿼리의 자세한 예

Python 플라스크 다대다 테이블 쿼리의 자세한 예

零下一度
零下一度원래의
2017-06-29 15:37:512042검색

플라스크를 공부하다 보면 필연적으로 다대다 테이블 쿼리를 접하게 됩니다. 저도 오늘 이 문제에 직면했습니다. 여러분의 참고를 위해 제 아이디어를 Script Home 플랫폼에 공유하겠습니다

Flask를 연구하다 보면 필연적으로 다대다 테이블 쿼리에 직면하게 됩니다. 저도 오늘 이 문제에 직면했습니다. 그러다가 오랫동안 생각했어요. 해결책이 생각나지 않아서 여러 가지 방법을 시도했지만 생각의 한계로 인해 포기한 것인지 나중에 온라인으로 Baidu에 접속했지만 여전히 Baidu의 결과와 어떤 차이가 있음을 발견했습니다. 그래서 저는 Baidu에서 얻은 아이디어를 바탕으로 데이터 구조를 탐색했습니다. 여기서는 제가 작성한 데이터베이스 코드의 일부를 보여드리겠습니다. 이해를 깊게 하세요.


post_class=db.Table('post_class',
  db.Column('post_id',db.Integer(),db.ForeignKey('posts.id')),
  db.Column('classifa_id',db.Integer(),db.ForeignKey('fenlei.id')))
class Post(db.Model):#文章表
  tablename='posts'
  id=db.Column(db.Integer,primary_key=True,autoincrement=True)
  title=db.Column(db.String(255),unique=True)
  text=db.Column(db.Text())
  publish_date=db.Column(db.DateTime,default=datetime.datetime.now())
  user_id=db.Column(db.Integer,db.ForeignKey('users.id'))
  is_recomment=db.Column(db.Boolean,default=False)
  comments = db.relationship(
    'Comment',
    backref='posts',
    lazy='dynamic')
  tag = db.relationship(
    'Tag',
    secondary=posts_tags,
    backref=db.backref('posts', lazy='dynamic')
  )
  classname=db.relationship('Classifa',
    secondary=post_class,
    backref=db.backref('posts'))
  def repr(self):
    return "<Model Post `{}`>".format(self.title)
class Classifa(db.Model):#分类
  tablename=&#39;fenlei&#39;
  id=db.Column(db.Integer(),primary_key=True)
  name=db.Column(db.String(64))
  def repr(self):
    return self.name

여기에는 세 개의 테이블이 있습니다. 하나는 기사 목록이고 다른 하나는 분류 테이블입니다. 기사가 동시에 여러 카테고리에 속할 수도 있습니다. 세 번째 테이블은 다대다 관계를 표시하므로 다음으로 이를 쿼리하려면 어떻게 해야 할까요? 아래 기사,

제 코드를 살펴보겠습니다


data=Classifa.query.filter_by(name=&#39;数据库&#39;).first()
 data_post=data.posts

여기서는 카테고리에서 직접 이 카테고리를 찾아낸 다음, 세 번째 테이블을 통해 이 카테고리에 속하는 기사를 조회해 보도록 하겠습니다. 사실 여기는 매우 간단합니다. .. 어쩌면 당시에는 내 뇌가 단락되었기 때문일지도 모르겠습니다. 자, 앞으로 나아가면서 배워보세요.

위 내용은 Python 플라스크 다대다 테이블 쿼리의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.