from random import randint
from this import d
from turtle import title
from sqlalchemy import Column, Integer, String
from util_db import Base, Session
class News(Base):
__tablename__ = "t_news"
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String(32), nullable=False)
content = Column(String(32), nullable=False)
read_count = Column(Integer)
def __repr__(self) -> str:
return f"<User: id={self.id} title={self.title} content={self.content} read_count={self.read_count}>"
def create_data():
Base.metadata.drop_all()
Base.metadata.create_all()
with Session() as ses:
for i in range(10):
news = News(title=f"title{i}", content=f'info{i}',read_count=randint(0,1000))
ses.add(news)
ses.commit()
# limit() :可以限制查询的时候只查询前几条数据,属于top-N查询(top前 n条)
def query_limit():
with Session() as ses:
newss = ses.query(News).limit(3).all()
for n in newss:
print(n)
# offset(n): 可以过滤掉前n条数据
def query_offset():
with Session() as ses:
newss = ses.query(News).offset(5).all()
for n in newss:
print(n)
# offset和limit实现分页操作(推荐使用!!!!!!)
'''
pagesize pagenum 跳过行数 = (pagenum-1)*pagesieze
3 1 0
3 2 3
3 3 6
3 4 9
'''
def query_by_page():
with Session() as ses:
newss = ses.query(News).limit(3).offset(0).all()
print("第一页:")
for n in newss:
print(n)
# python自带切片方法:[a:b] slice(a,b) (根据索引,从0开始)
# 推荐使用silce,因为这个不需要把整个数据查出来
# [:],需要查找完再切片
def query_by_slice():
with Session() as ses:
newss = ses.query(News).slice(3,6).all()
for n in newss:
print(n)
def query_by_qiepian():
with Session() as ses:
newss = ses.query(News).all()[3:6]
for n in newss:
print(n)
if __name__ == "__main__":
# create_data()
# query_limit()
# query_offset()
# query_by_page()
# query_by_slice()
query_by_qiepian()
106.SQLAlchemy数据的分页
最新推荐文章于 2024-03-15 14:18:18 发布