分页查询这样写,不知道是否正确

来源:3-3 python查询mysql数据库

Ethan_Ban

2019-06-27

我将标题title、想要显示的页码page、每页显示数量page_size全部以变量形式传入,
在get_more_limit( )方法中不明写具体的值。而是在main( )中调用时传入。
运行也正确。
我想问,这种方法在实际开发中,是否可取,会不会参数过多导致其他问题?

   # 获取多条数据,并分页

    def get_more_limit(self, title, page, page_size):
        # 准备SQL
        offset = int((page - 1) * page_size)

        sql = 'SELECT * FROM `news` WHERE `types` = %s ORDER BY `created_at` DESC LIMIT %s,%s;'

        # 找到cursor
        cursor = self.conn.cursor()
        # 执行SQL
        cursor.execute(sql, (title, offset, page_size))

        # 拿到结果, 处理数据
        rest = [dict(zip([k[0] for k in cursor.description], row))
                for row in cursor.fetchall()]

        # 关闭cursor/连接
        cursor.close()
        self.get_close()
        return rest


	def main():
	    obj = MysqlSearch()
	    rest = obj.get_more_limit('NBA',2, 2)
	    print(rest)

图片描述

写回答

2回答

NavCat

2019-06-27

这么几个参数还是算少的啦,同学放心。当然如果你觉得参数过多,可以给定参数的默认值,譬如,设置默认的页面大小为20,每页20条数据:

def get_more_limit(self, title, page, page_size=20):
    pass

如果同学遇到后续开发中参数实在过多,可以考虑将多个参数放到一个dict或者是tuple进行传递。

1
5
NavCat
回复
沧海遗珠丶丶
使用%s是因为mysqlclient底层会将字符串进行转换。文档上有解释:https://mysqlclient.readthedocs.io/user_guide.html#some-examples
2019-09-08
共5条回复

沧海遗珠丶丶

2019-09-07

offset,page_size不是整形数吗?为什么你limit后面两个%s,可以跑成功?改成%d可以吗?

0
0

Python操作三大主流数据库-MySQL+MongoDB+Redis

一次实战同时掌握Python操作MySQL,MongoDB,Redis 三大数据库使用技巧

2024 学习 · 376 问题

查看课程