关于翻页问题

关于翻页问题

http://img1.sycdn.imooc.com//climg/5ede023e09d6300513580798.jpg我在控制台上显示的有两页,但是输入 next 之后第二页没有内容,我数据库里面有16条内容

app.py

from colorama import Fore, Style
from getpass import getpass
from service.user_service import UserService
from service.news_servcie import NewsService
import os
import sys
import time

__user__service = UserService()
__news_service = NewsService()

while True:
   os.system("clear")
   print(Fore.LIGHTBLUE_EX, "\n\t=======================")
   print(Fore.LIGHTBLUE_EX, "\n\t欢迎使用新闻管理系统 ")
   print(Fore.LIGHTBLUE_EX, "\n\t=======================")
   print(Fore.LIGHTGREEN_EX, "\n\t1.登录系统")
   print(Fore.LIGHTGREEN_EX, "\n\t2.退出系统")
   print(Style.RESET_ALL)
   opt = input("\n\t输入操作编号:")
   if opt == '1':
       username = input("\n\t用户名:")
       password = getpass("\n\t密码:")
       result = __user__service.login(username, password)
       # 登录成功
       if result == True:
           # 查询角色
           role = __user__service.search_user_role(username)
           os.system("clear")
           while True:
               if role == "新闻编辑":
                   print("test")
               elif role == "管理员":
                   print(Fore.LIGHTGREEN_EX, "\n\t1.新闻管理")
                   print(Fore.LIGHTGREEN_EX, "\n\t2.用户管理")
                   print(Fore.LIGHTRED_EX, "\n\tback. 退出登录")
                   print(Fore.LIGHTRED_EX, "\n\texit.退出系统")
                   print(Style.RESET_ALL)
                   opt = input("\n\t输入操作编号:")
                   if opt == "1":
                       while True:
                           os.system("clear")
                           print(Fore.LIGHTGREEN_EX, "\n\t1.审批新闻")
                           print(Fore.LIGHTGREEN_EX, "\n\t2.删除新闻")
                           print(Fore.LIGHTRED_EX, "\n\tback. 返回上一层")
                           print(Style.RESET_ALL)
                           opt = input("\n\t输入操作编号:")
                           if opt == "1":
                               page = 1
                               while True:
                                   os.system("clear")
                                   count_page = __news_service.search_unreview_count_page()
                                   result = __news_service.search_unreview_list(page)
                                   for index in range(len(result)):
                                       one = result[index]
                                       print(Fore.LIGHTBLUE_EX, "\n\t%d\t%s\t%s\t%s" % (index + 1, one[1], one[2], one[3]))
                                   print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
                                   print(Fore.LIGHTBLUE_EX, "\n\t%d/%d" % (page, count_page))
                                   print(Fore.LIGHTBLUE_EX, "\n\t-------------------")
                                   print(Fore.LIGHTRED_EX, "\n\tback. 返回上一层")
                                   print(Fore.LIGHTRED_EX, "\n\tprev. 返回上一页")
                                   print(Fore.LIGHTRED_EX, "\n\tnext. 返回下一页")
                                   print(Style.RESET_ALL)
                                   opt = input("\n\t输入操作编号:")
                                   if opt == "back":
                                       break
                                   elif opt == "prev" and page > 1:
                                       page -= 1
                                   elif opt == "next" and page < count_page:
                                       page += 1




                   elif opt == "back":
                       break
                   elif opt == "exit":
                       sys.exit(0)
       else:
           print("\n\t登录失败(5秒之后自动返回)")
           time.sleep(5)
   elif opt == "2":
       sys.exit(0)

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕笑蓉 2020-06-08 18:41:57

同学,你好。老师这边运行同学的代码是没有问题的,同学使用的mysql版本是否是5.7的,可能是因为mysql版本不同导致的sql在做分页查询的时候出现了问题,同学将分页查询语句先拿到数据库中查找一下,看能找到几条数据。需要查询的sl语句如:

http://img1.sycdn.imooc.com//climg/5ede15ea09b46c3708580209.jpg

祝学习愉快~


  • 提问者 MaxLu #1
    我在数据库中写的 SQL语句 SELECT n.id, n.title, t.type, u.username FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id JOIN t_user AS u ON n.editor_id = u.id WHERE n.state=%s ORDER BY n.create_time DESC LIMIT %s, %s; 在数据库中查找不到任何数据,是直接报错的,是我的 SQL 语句本来就写错了还是因为版本的问题。 MySQl == 5.7 报错信息: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s ORDER BY n.create_time DESC LIMIT %s, %s' at line 4, Time: 0.002000s
    2020-06-08 18:57:03
  • 提问者 MaxLu #2
    我在数据库中写的 SQL语句 SELECT n.id, n.title, t.type, u.username FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id JOIN t_user AS u ON n.editor_id = u.id WHERE n.state=%s ORDER BY n.create_time DESC LIMIT %s, %s; 在数据库中查找不到任何数据,是直接报错的,是我的 SQL 语句本来就写错了还是因为版本的问题。 MySQl == 5.7 报错信息: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s ORDER BY n.create_time DESC LIMIT %s, %s' at line 4, Time: 0.002000s
    2020-06-08 18:57:10
  • 提问者 MaxLu #3
    我在数据库中写的 SQL语句 SELECT n.id, n.title, t.type, u.username FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id JOIN t_user AS u ON n.editor_id = u.id WHERE n.state=%s ORDER BY n.create_time DESC LIMIT %s, %s; 在数据库中查找不到任何数据,是直接报错的,是我的 SQL 语句本来就写错了还是因为版本的问题。 MySQl == 5.7 报错信息: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s ORDER BY n.create_time DESC LIMIT %s, %s' at line 4, Time: 0.002000s
    2020-06-08 18:57:16
好帮手慕笑蓉 2020-06-08 17:43:56

同学,你好。同学查询的内容是已审批还是未审批,根据同学截图查询的内容,先确定一下数据库的数据已审批和未审批的数据是多少。

祝学习愉快~


  • 提问者 MaxLu #1
    查询的是未审批的,我未审批的数据有16条,但是在控制台上只显示了7条。页数那里告诉我有两页,输入next也可以翻页成功,只是翻页之后没有数据。
    2020-06-08 17:48:15
  • 提问者 MaxLu #2
    news_dao.py from db.mysql_db import pool class NewsDao: # 查询待审批新闻列表 def search_unreview_list(self, page): try: con = pool.get_connection() cursor = con.cursor() sql = "SELECT n.id, n.title, t.type, u.username " \ "FROM t_news AS n JOIN t_type AS t ON n.type_id = t.id " \ "JOIN t_user AS u ON n.editor_id = u.id " \ "WHERE n.state = %s " \ "ORDER BY n.create_time DESC " \ "LIMIT %s, %s" cursor.execute(sql, ("待审批", (page - 1) * 10, 10)) result = cursor.fetchall() return result except Exception as e: print(e) finally: if "con" in dir(): con.close() # 查询待审批新闻的总页数 def search_unreview_count_page(self): try: con = pool.get_connection() cursor = con.cursor() sql = "SELECT CEIL(COUNT(*)/ 10) FROM t_news WHERE state = %s" cursor.execute(sql, ["待审批"]) count_page = cursor.fetchone()[0] return count_page except Exception as e: print(e) finally: if "con" in dir(): con.close()
    2020-06-08 17:50:43
  • 提问者 MaxLu #3
    news_service.py from db.news_dao import NewsDao class NewsService: __news_dao = NewsDao() # 查询待审批新闻列表 def search_unreview_list(self, page): result = self.__news_dao.search_unreview_list(page) return result # 查询待审批新闻的总页数 def search_unreview_count_page(self): count_page = self.__news_dao.search_unreview_count_page() return count_page
    2020-06-08 17:50:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师