我想创建一个平面论坛,其中线程不是单独的表,具有帖子的复合主键。
所以帖子有两个字段形成一个自然键:thread_id
和post_number
,其中进一步是它们所属的线程的ID,后者是它们在线程中的位置。如果您不相信,请检查该行下方。
我的问题是我不知道如何告诉 SQLAlchemy
当提交带有 thread_id 的新
Post
实例时tid
,查看有多少带有 thread_id 的帖子tid
存在,并从该数字开始自动递增。
为什么我认为架构是个好主意?因为它自然且高效:
class Post(Base):
number = Column(Integer, primary_key=True, autoincrement=False, nullable=False)
thread_id = Column(Integer, primary_key=True, autoincrement=False, nullable=False)
title = Column(Text) #nullable for not-first posts
text = Column(Text, nullable=False)
...
PAGESIZE = 10
#test
tid = 5
page = 4
整个线程(查询):
thread5 = session.query(Post).filter_by(thread_id=5)
话题标题:
title = thread5.filter_by(number=0).one().title
话题页面
page4 = thread5.filter(
Post.number >= (page * PAGESIZE),
Post.number < ((page+1) * PAGESIZE)).all()
#or
page4 = thread5.offset(page * PAGESIZE).limit(PAGESIZE).all()
页数:
ceil(thread5.count() / PAGESIZE)