1.如何创建一个类?
__init__(self):
self代表类的实例,而非类
类的方法:在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
#私有的东西外部不能调用
举例:
ORM中对于raw-queryset的分页是不能用分页器的,所以我们自建一个封装sql的分页类,调用即可
#1.获取数据库连接
from django.db importconnectionclass SqlPaginator(object): #python3可以不写,默认继承
#实现sql分页类:
def __init__(self, sql, params, page_size):
super().__init__()
self.sql= sql #要查询的sql
self.params = params #sql查询时候传递的参数
self.page_size = page_size #每页多少条数据
defpage(self, now_page):"""获取当前页:
:param now_page: 页码"""offset= (now_page - 1) * self.page_size #偏移量:每页的首位置
sql = self.sql + 'limit %s offset %s' #不要漏了sql的空格
#使用cursor:
sql = ('select `id`, `username`, `nickname` from `weibo_user`'
'where `username` = %s')#2。根据连接获取游标
cursor =connection.cursor()#3。根据游标执行sql
rest =cursor.execute(sql, [self.page_size, offset])#4。获取查询结果
rows =cursor.fetchall()return rows
以及这个class怎么使用?
还是在ORM中,所以在视图中调用(此处省略url建立)
defpage_p_sql2(request):#使用sql分页类:
from utils.sqlpage importSqlPaginator
sql= ('select `id`, `username`, `nickname` from `weibo_user`')
sql_params=[]
page_size= 10p= SqlPaginator(sql, sql_params, page_size) #类的实例化
page_data = p.page(5)for row inpage_data:print(row)return HttpResponse('ok')
object类是什么?
manager是ORM中进行数据库查询操作的接口,每个model都必须拥有一个manager,object是一个默认的manager。自定义的manager也要继承它。
在python3不写会默认调用: