為何管理新聞頁面無法顯現所有新聞資料?

為何管理新聞頁面無法顯現所有新聞資料?

相关截图:

https://img1.sycdn.imooc.com//climg/62d959fb0957c6bc04240268.jpg

相关截图:

https://img1.sycdn.imooc.com//climg/62d95a2b095ba9a408940205.jpg

相关代码:news_dao

# 查詢新聞列表
def search_list(self, page):
    try:
        con = pool.get_connection()
        cursor = con.cursor()
        sql = 'SELECT n.id, n.title, t.type, u.username ' \
        'FROM t_news n JOIN t_type t ON n.type_id=t.id ' \
        'JOIN t_user u ON n.editor_id=u.id ' \
        'ORDER BY n.id DESC ' \
        'LIMIT %s, %s'
        # n.create_time
        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()

相关代码:app

elif choice == '2':
    page = 1  # 必需要將變量設在循環外部, 否則每一次循環, 上一次搜索到的頁數將消失
    while True:
        os.system('cls')
        count_page = __news_service.search_count_page()  # 查詢總頁數
        result = __news_service.search_list(page)  # 所有紀錄的結果
        # page 為當前頁數, 默認為第一頁
        # 為何要使用索引的序號, 而不是主鍵值? 使新聞被刪除後, 不會主鍵顯示不連續
        for index in range(len(result)):
            one = result[index]  # 需要逐一提取數據 -主鍵, title, content_id, type_id
            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, '-----------------------------')
        print('\n\t%d/%d' % (page, count_page))
        print(Fore.LIGHTBLUE_EX, '-----------------------------')
        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  # 需不需要重新調用查詢功能? 不用! 因為page會保存在循環內, 到時會重新執行
        elif opt == 'next' and page < count_page:  # 當前頁數 < 總頁數
            page += 1
        elif int(opt) >= 1 and int(opt) <= 10:  # 此處的opt要輸入控制台顯示的新聞序號, 一頁10條紀錄
            # 但螢幕上看到的opt非原本的主鍵值, result[0]為原本結果的第一條紀錄
            news_id = result[int(opt) - 1][0]
            result = __news_service.search_by_id(news_id)
            title = result[0]
            type = result[1]
            is_top = result[2]
            print('\n\t新聞原標題:%s' % (title))
            new_title = input('\n\t新標題:')
            print('\n\t原類型:%s' % (type))
            # 打印類型列表
            type = __type_service.search_all_type()
            for index in range(len(type)):
                one = type[index]
                print(Fore.LIGHTBLUE_EX, '\n\t{}.{}'.format(index + 1, one[1]))
            print(Style.RESET_ALL)
            opt = input('\n\t類型編號;')
            type_id = type[int(opt) - 1][0]
            # TODO: 輸入新聞內容
            content_id = 100
            print('\n\t原置頂級別:%s' % (is_top))
            new_is_top = input('\n\t新置頂級別(0-5):')
            is_commit = input('\n\t是否提交?(Y/N):')
            if is_commit == 'Y' or is_commit == 'y':
                __news_service.update(news_id, new_title, type_id, content_id, new_is_top)
                print('修改成功(3秒自動返回)')
                time.sleep(3)

相关代码:news_service

# 查詢新聞列表
def search_list(self, page):
    result = self.__news_dao.search_list(page)
    return result

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

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

1回答
好帮手慕小猿 2022-07-22 14:25:53

同学,你好!不能显示所有新闻数据是因为在查询时返回所有数据是以分页的形式显示的

https://img1.sycdn.imooc.com//climg/62da40b7095511c707770141.jpg
https://img1.sycdn.imooc.com//climg/62da40c509ba567105890150.jpg
https://img1.sycdn.imooc.com//climg/62da40d5099351aa08120436.jpg
同学若不想分页显示数据,同学可以添加新的方法获取所有不分页的数据,如图
app.py调用的方法

https://img1.sycdn.imooc.com//climg/62da41650901c09b12000230.jpg
news_service.py文件添加的方法
https://img1.sycdn.imooc.com//climg/62da41de094062d907370180.jpg
news_dao.py文件添加的方法

def search_list_all(self):
    try:
        con = pool.get_connection()
        cursor = con.cursor()
        sql = 'SELECT n.id, n.title, t.type, u.username ' \
              'FROM t_news n JOIN t_type t ON n.type_id=t.id ' \
              'JOIN t_user u ON n.editor_id=u.id ' \
              'ORDER BY n.id DESC ' \
        # n.create_time
        cursor.execute(sql)
        result = cursor.fetchall()
        return result
    except Exception as e:
        print(e)
    finally:
        if 'con' in dir():
            con.close()

如此操作可以显示所有数据。祝学习愉快~

  • 提问者 精慕门_learner #1

    抱歉! 我的意思可能沒表達清楚, 我是指為何我的mysql數據庫裡是有添加資料的, 但在顯示時為何連一條紀錄都沒有出現, 明明就在第一頁, 但只能顯示總頁數和當前的頁數而已, 而不能出現如上截圖所示數據庫內的資料

    2022-07-22 14:41:29
  • 同学,你好!老师这边运行同学提供的代码是可以显示数据的。同学可以将整个项目发送至1757578369@qq.com邮箱,老师这边运行代码看下具体问题。祝学习愉快!

    2022-07-22 15:23:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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