日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python的Django框架實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(不返回QuerySet的方法)

瀏覽:44日期:2022-07-25 09:58:55

一、創(chuàng)建模型類:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import modelsclass Course(models.Model): '''課程表''' name = models.CharField(verbose_name=’課程名稱’, max_length=255) description = models.TextField(verbose_name=’課程描述信息’, null=True) price = models.DecimalField(verbose_name=u’課程價(jià)格’, max_digits=15, decimal_places=2, default=0.0) deleted = models.BooleanField(verbose_name=’課程是否被刪除’, default=False)created_at = models.DateTimeField(auto_now_add=True, db_index=True) edited_at = models.DateTimeField(auto_now=True) def __repr__(self): return self.nameclass User(models.Model): '''用戶表:記錄用戶常用信息''' name = models.CharField(verbose_name=u’用戶的姓名’, max_length=32, null=True) mobile = models.CharField(verbose_name=u’用戶的手機(jī)號(hào)’, max_length=32, unique=True) courses = models.ManyToManyField(verbose_name=u’關(guān)聯(lián)課程’, to=’Course’, through=’UserCourse’, related_name=’user_course’)class UserExtra(models.Model): '''用戶信息額外表: 存儲(chǔ)一些用戶不常用信息''' birthday = models.CharField(verbose_name=u’生日’, max_length=32, null=True) email = models.EmailField(verbose_name=u’郵箱’, null=True) user = models.OneToOneField(to=User, related_name=’extra’) # 跟User表是一對(duì)一的關(guān)系class UserCourse(models.Model): '''課程表跟用戶表手動(dòng)添加的多對(duì)多表''' course = models.ForeignKey(’Course’, related_name=’my_course’) user = models.ForeignKey(’User’, related_name=’my_user’)class Coursechapter(models.Model): '''課程章節(jié)表''' name = models.CharField(verbose_name=’課程名稱’, max_length=255) description = models.TextField(verbose_name=’課程描述信息’, null=True) course = models.ForeignKey(’Course’, related_name=’course_chapter’)

執(zhí)行以下命令,進(jìn)行數(shù)據(jù)庫(kù)的遷移:

python manage.py makemigrations app_name[應(yīng)用的名稱]python manage.py migrate app_name[應(yīng)用的名稱]

遷移成功后可以進(jìn)行以下的操作咯~

二、介紹不返回QuerySet的方法:

方法名 介紹 get() 獲取單個(gè)對(duì)象 create() 創(chuàng)建對(duì)象 bulk_create() 批量創(chuàng)建對(duì)象 get_or_create() 查詢對(duì)象,若沒(méi)有找到則創(chuàng)建新的對(duì)象 update() 批量更新對(duì)象 update_or_create() 更新對(duì)象,若沒(méi)有找到則創(chuàng)建新的對(duì)象 delete() 批量刪除對(duì)象 first() 獲取第一個(gè)對(duì)象 last() 獲取最后一個(gè)對(duì)象 latest() 獲取最近的對(duì)象 earliest() 獲取最早的對(duì)象 count() 統(tǒng)計(jì)對(duì)象的個(gè)數(shù) exists() 判斷queryset中是否有對(duì)象 aggregate() 聚合操作 in_bulk() 根據(jù)主鍵值的列表,批量返回對(duì)象 iterator() 獲取包含對(duì)象的迭代器

三、以上方法的使用:

1.get()方法:

返回按照查詢參數(shù)匹配到的單個(gè)對(duì)象,若匹配到的對(duì)象個(gè)數(shù)不只一個(gè)的話,會(huì)觸發(fā)MultipleObjectsReturned異常,若根據(jù)參數(shù)匹配不到對(duì)象的時(shí)候,會(huì)觸發(fā)DoesNotExist異常。

成功栗子:

try: user_obj = models.User.objects.get(mobile=13069636688) print(user_obj)except models.User.DoesNotExist: print ’User Not Exist’# 輸出結(jié)果:User object

使用get()方法最好將異常捕獲添加上。

獲取參數(shù)失敗栗子:

# 使用get()方法獲取一條不存在的數(shù)據(jù)user_obj = models.User.objects.get(mobile=13888888888)# 拋出異常:DoesNotExist: User matching query does not exist.# 使用get()方法獲取多條數(shù)據(jù)user_obj = models.User.objects.get(name=’小明’)# 拋出異常:MultipleObjectsReturned: get() returned more than one User -- it returned 2!

使用ObjectDoesNotExist異常栗子:

DoesNotExist異常從django.core.exceptions.ObjectDoesNotExist繼承,可以定位多個(gè)DoesNotExist異常,舉個(gè)栗子:

from django.core.exceptions import ObjectDoesNotExisttry: user_obj = models.User.objects.get(mobile=13888888888)except ObjectDoesNotExist: print ’User Not Exist’# 拋出自定義異常:User Not Exist

通常我們使用get()方法中的參數(shù),都是查詢表中作為唯一標(biāo)識(shí)的字段。

2.create()方法:

create(**kwargs)

在一步操作中同時(shí)創(chuàng)建并且保存對(duì)象的便捷方法。

舉個(gè)栗子:

user_obj = models.User.objects.create(mobile=13045621111, name=’小牛’)print(user_obj)# 輸出結(jié)果如果:User object

同等于:

user_obj = models.User(mobile=13045621112, name=’小牛’)user_obj.save()

3.bulk_create()方法:

bulk_create(objs, batch_size=None)

這種插入比較高效(通常僅一個(gè)查詢,無(wú)論有多少對(duì)象),將提供的對(duì)象列表插入到數(shù)據(jù)庫(kù)中。

舉個(gè)栗子:

course_obj = models.Course.objects.bulk_create( [ models.Course(name=’哈爾濱工業(yè)大學(xué)’), models.Course(name=’長(zhǎng)春大學(xué)’) ])print course_obj# 輸出結(jié)果如下:[<Course: 哈爾濱工業(yè)大學(xué)>, <Course: 長(zhǎng)春大學(xué)>]

注意:

1.不會(huì)調(diào)用模型的save()方法,所以不會(huì)發(fā)送pre_save和post_save信號(hào)。

2.不適用多張表繼承中的子模型。

3.不適用于多對(duì)多關(guān)系。

4. get_or_create() 方法:

get_or_create(defaults=None, **kwargs)

通過(guò)kwargs來(lái)查詢對(duì)象的簡(jiǎn)便方法(若模型中所有字段都有默認(rèn)值或可以為空),如果該對(duì)象不存在則創(chuàng)建一個(gè)新的對(duì)象。

該方法返回一個(gè)由(object,created)組成的元組,元組中的object是一個(gè)查詢到或被創(chuàng)建的對(duì)象,created是一個(gè)表示是否創(chuàng)建新對(duì)象的布爾值(true:表示創(chuàng)建新對(duì)象|false:相反)。

舉個(gè)栗子:

try: # 通過(guò)id=100查看課程是否存在 course_obj = models.Course.objects.get(pk=100)except ObjectDoesNotExist: # 如果不存在就創(chuàng)建一門課程 course_obj = models.Course.objects.create(name=’上海財(cái)經(jīng)大學(xué)’, price=’1877’)

使用get_or_create()方法重寫的栗子:

# 查看課程的name='上海交通大學(xué)', 如果不存在, 那么創(chuàng)建一條name='信息科技大學(xué)',price=2000的數(shù)據(jù)obj, created = models.Course.objects .get_or_create(name=’上海交通大學(xué)’, defaults={’name’: ’信息科技大學(xué)’, ’price’: 2000})print(obj, created)# 輸出結(jié)果如下:Course object True

注意:

​ 1.任何傳遞給get_or_create()的關(guān)鍵字參數(shù),除了一個(gè)可選的defaults,都將傳遞給get()方法調(diào)用。

​ 2.如果找到一個(gè)對(duì)象,返回一個(gè)包含匹配到的對(duì)象以及False組成元組。

​ 3.如果查到的對(duì)象超過(guò)一個(gè)以上,將拋出MultipleObjectsReturned異常。

​ 4.如果找不到對(duì)象,get_or_create()將會(huì)實(shí)例化并保存一個(gè)新的對(duì)象,返回一個(gè)由新的對(duì)象以及True組成元組。

建議:只在Django視圖的POST請(qǐng)求中使用get_or_create(),因?yàn)檫@是一個(gè)具有修改性質(zhì)的動(dòng)作,不應(yīng)該使用在GET請(qǐng)求中,那樣不安全。

5. update()方法:

update(**kwargs)

對(duì)指定的字段執(zhí)行批量更新操作,并返回匹配的行數(shù)

舉個(gè)栗子:

# 可以更新多個(gè)字段,沒(méi)有多少字段的限制course_row = models.Course.objects.filter(name=’北京大學(xué)’) .update(name=’上海交通大學(xué)’, price=2000)print(course_row)# 輸出結(jié)果如下:1 # 表示僅在數(shù)據(jù)庫(kù)中修改了一條數(shù)據(jù)

注意:

​ 1.update()方法無(wú)需save()操作,唯一限制是它只能更新模型主表中的列,而不是關(guān)聯(lián)的整個(gè)模型。

​ 2.update()方法返回受影響的行數(shù)。

​ 3.update()方法還可以防止在加載對(duì)象和調(diào)用save()之間的短時(shí)間內(nèi)數(shù)據(jù)庫(kù)中某些內(nèi)容可能發(fā)生更改的競(jìng)爭(zhēng)條件。

僅是更新一下對(duì)象,不需要為對(duì)象做其他事情,最有效的方法是調(diào)用update(),而不是將模型對(duì)象加載到內(nèi)存中去。

# 不要這么做的栗子:course_obj = models.Course.objects.get(name=’北京大學(xué)’)course_obj.name = ’北京大學(xué)’course_obj.save()

6.update_or_create()方法:

update_or_create(defaults=None, **kwargs)

通過(guò)給出的kwargs來(lái)更新對(duì)象的便捷方法, 如果沒(méi)找到對(duì)象,則創(chuàng)建一個(gè)新的對(duì)象。

defaults是一個(gè)由 (field, value)對(duì)組成的字典,用于更新對(duì)象。defaults中的值可以是可調(diào)用對(duì)象。

該方法返回一個(gè)由(object, created)組成的元組,元組中的object是一個(gè)創(chuàng)建的或者是被更新的對(duì)象, created是一個(gè)標(biāo)示是否創(chuàng)建了新的對(duì)象的布爾值(true(表示創(chuàng)建成功)|false(相反)) 。

舉個(gè)栗子:

try: # 查看課程name='北京大學(xué)'存在,若存在那么將name修改成'財(cái)經(jīng)大學(xué)'進(jìn)行保存 course_obj = models.Course.objects.get(name=’北京大學(xué)’) course_obj.name = ’財(cái)經(jīng)大學(xué)’ course_obj.save()except ObjectDoesNotExist: # 如果不存在, 則創(chuàng)建一條name='北京大學(xué)'的課程 course_obj = models.Course.objects.create(name=’北京大學(xué)’)

使用update_or_create()方法重寫:

# 查找課程name='財(cái)經(jīng)大學(xué)'是否存在, 如果存在,將name跟price字段進(jìn)行更新, 若不存在創(chuàng)建新的記錄obj, res = models.Course.objects .update_or_create(name=’財(cái)經(jīng)大學(xué)’, defaults={’name’: ’復(fù)旦大學(xué)’, ’price’: 2080})print(obj, res)# 輸出結(jié)果:Course object False # 表示沒(méi)有創(chuàng)建新的對(duì)象, 若找到該對(duì)象將更新Course object True # 表示創(chuàng)建了新的對(duì)象

7.delete()方法:

delete()

批量刪除QuerySet中的所有對(duì)象,并返回刪除的對(duì)象個(gè)數(shù)和每個(gè)對(duì)象類型的刪除次數(shù)的字典。delete()動(dòng)作是立即執(zhí)行的。

舉個(gè)栗子:

# 刪除課程price=2080的所有課程cur_course =models.Course.objects.filter(price=2080).delete()print(cur_course)# 輸出結(jié)果:(7, {u’apps.Coursechapter’: 2, u’apps.Course’: 2, u’apps.UserCourse’: 3})# 分析以上結(jié)果, 7表示共刪除7條數(shù)據(jù), Coursechapter表中2條數(shù)據(jù), Course表中2條數(shù)據(jù), UserCourse表中3條數(shù)據(jù)

注意:delete()會(huì)為所有已刪除的對(duì)象(包括級(jí)聯(lián)刪除、對(duì)象的外鍵、多對(duì)多的關(guān)系)發(fā)出pre_delete和post_delete信號(hào)。

8.first()方法:

first()

返回結(jié)果集的第一個(gè)對(duì)象, 當(dāng)沒(méi)有找到時(shí)返回None。如果QuerySet沒(méi)有設(shè)置排序,則將會(huì)自動(dòng)按主鍵進(jìn)行排序。

舉個(gè)栗子:

# 獲取課程表所有數(shù)據(jù)中的第一條數(shù)據(jù)course_obj = models.Course.objects.all().first()print(course_obj)# 輸出結(jié)果如下:Course object # 說(shuō)明獲取到了第一條數(shù)據(jù)# 獲取課程name=’農(nóng)業(yè)大學(xué)’的第一條數(shù)據(jù)course_obj = models.Course.objects.filter(name=’農(nóng)業(yè)大學(xué)’).first()print(course_obj)# 輸出結(jié)果:None # 說(shuō)明課程表中沒(méi)有name=’農(nóng)業(yè)大學(xué)’

使用[0]來(lái)獲取第一個(gè)對(duì)象:

course_obj = models.Course.objects.filter(name=’農(nóng)業(yè)大學(xué)’)[0]print(course_obj)# 輸出結(jié)果:IndexError: list index out of range # 拋出異常,沒(méi)有找到并不會(huì)返回None# 如果使用[0]方法,需要添加異常處理try: course_obj = models.Course.objects.filter(name=’農(nóng)業(yè)大學(xué)’)[0]except IndexError: course_obj = None

9.last()方法:

last()

跟first()方法相同,只是返回的是查詢集中最后一個(gè)對(duì)象。

舉個(gè)栗子:

# 獲取課程表中最后一條數(shù)據(jù)course_obj = models.Course.objects.last()print(course_obj)# 輸出結(jié)果:Course object

10.latest()方法:

latest(field_name=None)

使用日期字典field_name,按日期返回最新對(duì)象。

舉個(gè)栗子:

# 查看按創(chuàng)建課程日前返回的最新對(duì)象course_obj = models.Course.objects.filter(created_at__isnull=False).latest(’created_at’)print(course_obj.id)# 輸出結(jié)果:101 # 這次是打印的Course表的ID,因?yàn)閯?chuàng)建課程時(shí), 這就是創(chuàng)建的最新對(duì)象。

注意:earliest()和latest()可能會(huì)返回空日期的實(shí)例,可能需要過(guò)濾掉空值 。

11.earliest()方法:

earliest(field_name=None)

跟latest()方法相同,只是返回查詢集中按日期最早的對(duì)象。

舉個(gè)栗子:

# 獲取課程表中按日期創(chuàng)建課程最早的對(duì)象course_obj = models.Course.objects.filter(created_at__isnull=False).earliest(’created_at’)print(course_obj.id)# 輸出結(jié)果:1 # 打印Course表中的ID,因?yàn)閿?shù)據(jù)庫(kù)第一條數(shù)據(jù),就是最早創(chuàng)建的

12.count()方法:

count()

返回在數(shù)據(jù)庫(kù)中對(duì)應(yīng)的QuerySet對(duì)象的個(gè)數(shù)。

舉個(gè)栗子:

course_count = models.Course.objects.all().count()print(course_count)# 輸出結(jié)果:

count()永遠(yuǎn)不會(huì)引發(fā)異常。

13.exists()方法:

exists()

如果QuerySet包含任何結(jié)果,則返回True,否則返回False。

舉個(gè)栗子:

# 查找課程表中是否包含name='信息科技大學(xué)的集合'course_list = models.Course.objects.filter(name=’信息科技大學(xué)’)# 如果存在就打印'存在'if course_list.exists(): print(’存在’)# 輸出結(jié)果:存在

該exists()方法快于以下栗子:

# 同樣查找課程中是否包含name='信息科技大學(xué)'course_list = models.Course.objects.filter(name=’信息科技大學(xué)’)if course_list: print(’存在’)# 輸出結(jié)果:存在

14.aggregate()方法:

aggregate(args, *kwargs)

返回匯總值的字典(平均值、總和等),通過(guò)QuerySet進(jìn)行計(jì)算,每個(gè)參數(shù)指定返回的字典中將要包含的值。

舉個(gè)栗子:

匿名參數(shù)的名稱將基于聚合函數(shù)的名稱和模型字段生成

from django.db.models import Count# 獲取課程名稱name='信息科技大學(xué)',將'name'字段進(jìn)行聚合統(tǒng)計(jì)course_dict = models.Course.objects.filter(name='信息科技大學(xué)').aggregate(Count(’name’))print(course_dict)# 輸出結(jié)果:{u’name__count’: 3} # 將基于聚合函數(shù)的名稱(count)和模型字段(name)生成

再舉個(gè)栗子:

使用關(guān)鍵字參數(shù)來(lái)指定聚合函數(shù),可以控制返回的聚合的值的名稱。

from django.db.models import Count# 獲取課程名稱name='信息科技大學(xué)', 將name字段進(jìn)行聚合統(tǒng)計(jì)course_dict = models.Course.objects.filter(name='信息科技大學(xué)') .aggregate(customize_name=Count(’name’))print(course_dict)# 輸出結(jié)果:{’customize_name’: 3} # 使用關(guān)鍵字參數(shù)指定聚合函數(shù),返回聚合的值名稱

15.in_bulk()方法:

in_bulk(id_list=None)

獲取主鍵值的列表,并返回將每個(gè)主鍵值映射到具有給定ID的對(duì)象的實(shí)例的字典。如果未提供列表,則會(huì)返回查詢集中所有對(duì)象。

舉個(gè)栗子:

# 獲取課程表中ID是1的對(duì)象course_obj = models.Course.objects.in_bulk([1])print(course_obj)# 輸出結(jié)果:{1: <Course: Course object>}# 獲取課程表中ID是2,3的對(duì)象course_obj = models.Course.objects.in_bulk([2, 3])print(course_obj)# 輸出結(jié)果:{2: <Course: Course object>, 3: <Course: Course object>}# 若列表中沒(méi)有填寫ID, 返回空字典course_obj = models.Course.objects.in_bulk([])print(course_obj)# 輸出結(jié)果:{}# 獲取課程表所有的ID對(duì)應(yīng)的對(duì)象, 返回一個(gè)字典course_obj = models.Course.objects.in_bulk()print(course_obj)# 輸出結(jié)果:{1: <Course: Course object>, 2: <Course: Course object>, 3: <Course: Course object>, 4: <Course: Course object>, 5: <Course: Course object>, 6: <Course: Course object>,

16.iterator()方法:

iterator()

提交數(shù)據(jù)庫(kù)操作,獲取QuerySet,返回一個(gè)迭代器。

QuerySet通常會(huì)再內(nèi)部緩存其結(jié)果,以便再重復(fù)計(jì)算時(shí)不會(huì)導(dǎo)致額外的查詢。

主要時(shí)QuerySet的緩存機(jī)制,如果一次從數(shù)據(jù)庫(kù)取出很多數(shù)據(jù),就有可能導(dǎo)致程序崩潰,可以利用iterator()方法,做性能優(yōu)化。

舉個(gè)栗子:

# 取出數(shù)據(jù)庫(kù)的所有對(duì)象, 要考慮cache機(jī)制, 如果數(shù)據(jù)量太大, 程序就會(huì)崩潰course_list = models.Course.objects.all()# 利用iterator()方法, 這次就不能用2次for循環(huán), 第一次for循環(huán), 就已經(jīng)遍歷完了course_set = models.Course.objects.all().iterator()print(next(course_set))print(next(course_set))print(next(course_set))# 對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新, 但并沒(méi)有執(zhí)行, 只有再用的時(shí)候再執(zhí)行models.Course.objects.filter(pk=1).update(price=66)# 如果for循環(huán)2次, 打印2次結(jié)果, 也是執(zhí)行一次sql語(yǔ)句,因?yàn)榇嬖趕ql緩存機(jī)制,# 把第一次查詢的結(jié)果放到緩存里, 下次從緩存里調(diào)for obj in course_list: print(obj.name, obj.price)'''# 更新數(shù)據(jù)之前id:1name: 上海交通大學(xué)price: 2000# 更新數(shù)據(jù)后id:1 name: 上海交通大學(xué)price : 66'''

使用iterator()會(huì)導(dǎo)致先前的prefetch_related()調(diào)用被忽略,因?yàn)檫@兩個(gè)一起優(yōu)化沒(méi)有意義。

以上這篇Python的Django框架實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢(不返回QuerySet的方法)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久久久久久白浆| 国产精品7m凸凹视频分类| 亚洲欧美日韩高清在线| 在线日韩av| 黑丝美女一区二区| 夜夜嗨av一区二区三区网站四季av| 女人天堂亚洲aⅴ在线观看| 美女精品在线观看| 亚洲欧美网站在线观看| 亚洲欧美日韩视频二区| 中文字幕一区二区av| 日韩精品五月天| 免费一级欧美片在线观看网站| 国产成人精品三级高清久久91| 深夜福利视频一区二区| 在线日韩欧美| 综合国产视频| 美女在线视频一区| 久久亚洲国产| 夜夜嗨网站十八久久| 蜜臀久久99精品久久久画质超高清 | 日本一区福利在线| 欧美日韩午夜电影网| 欧美激情福利| 五月激情久久| 日韩中文字幕不卡| 国产精品成人一区二区网站软件| 国产suv精品一区二区四区视频 | 久久九九精品| 视频一区免费在线观看| 综合亚洲色图| 久久久国产精品入口麻豆| 久久久久久久久99精品大| 久久国产高清| 国产精品探花在线观看| 欧美亚洲日本精品| 亚洲婷婷丁香| 国产一区二区色噜噜| 亚洲精华国产欧美| 你懂的国产精品永久在线| 99久久亚洲精品蜜臀| 午夜视频一区二区在线观看| 国产精品99视频| 日韩精品一区第一页| 老司机精品视频在线播放| 精品免费av在线| 日本不卡在线视频| 夜鲁夜鲁夜鲁视频在线播放| 亚洲免费成人av在线| 青青青免费在线视频| 蜜臀va亚洲va欧美va天堂| 麻豆视频久久| 视频一区二区中文字幕| 国产一区二区视频在线看| 日韩精品一二区| а√在线中文在线新版| 亚洲精品美女91| 偷拍精品精品一区二区三区| 日韩欧美三区| 在线日韩一区| 国产欧美一区二区色老头| 亚洲夜间福利| 国产精品1区| 免费成人av在线播放| 樱桃视频成人在线观看| 91成人精品在线| 午夜久久美女| 国产高潮在线| 国产日产高清欧美一区二区三区 | 国产精品主播| 亚洲欧美日韩国产一区| 国产精品成人一区二区不卡| 日本大胆欧美人术艺术动态| 婷婷综合六月| 麻豆久久一区二区| 一区二区三区四区日韩| 成人看片网站| 久久中文字幕一区二区| 少妇精品久久久一区二区| 激情综合网址| 岛国av在线网站| 国产日本久久| 午夜视频一区二区在线观看| 尤物在线精品| 99热精品久久| 大香伊人久久精品一区二区| 奇米亚洲欧美| 国产精品美女久久久| 99精品在线观看| 都市激情国产精品| 美女视频黄久久| 日韩av一二三| 亚洲深深色噜噜狠狠爱网站 | 久久激五月天综合精品| 一区二区国产在线| 国产免费成人| 99视频精品全国免费| 黑森林国产精品av| 韩国女主播一区二区三区| 久久精品 人人爱| 日本三级亚洲精品| 日本免费一区二区视频| 亚洲综合婷婷| 在线免费观看亚洲| 免费中文字幕日韩欧美| 制服诱惑一区二区| 激情五月色综合国产精品| 1024精品一区二区三区| 久久精品国产68国产精品亚洲| 伊人网在线播放| 国产成人免费精品| 国产成人精品福利| 美女在线视频一区| 国产一区二区三区四区五区传媒| 精品国产一区二区三区av片| 国产在线观看91一区二区三区| 国模大尺度视频一区二区| 成人精品高清在线视频| 国内精品美女在线观看| 国产一区二区三区视频在线| 国产成人精品一区二区三区视频 | 欧美激情综合| 韩国女主播一区二区三区| 国语精品一区| 欧美日韩精品免费观看视完整| 热三久草你在线| 99久久亚洲精品| 午夜在线精品偷拍| 亚洲精品伊人| 国产精品一站二站| 国产成人精品一区二区免费看京 | 高清精品久久| 不卡一二三区| 99精品综合| 亚洲在线观看| 日本aⅴ精品一区二区三区 | 99综合视频| 亚洲精品女人| 国产精选久久| 涩涩av在线| 一区二区视频欧美| 日本伊人久久| 精品国产精品国产偷麻豆| 亚洲最新无码中文字幕久久 | 日韩一区二区三区在线免费观看| 999精品色在线播放| 国产精品日本| 日韩精品亚洲专区| 国产一区调教| 激情综合激情| 亚洲精品动态| 精品国产一区二区三区性色av| 日韩在线短视频| 日韩影院在线观看| 麻豆视频一区| 欧美福利在线| 欧美一区自拍| 日韩在线观看一区| 最新国产拍偷乱拍精品| 日韩欧美四区| 成人国产精品| 石原莉奈一区二区三区在线观看| 国产日韩中文在线中文字幕| 日韩免费高清| 亚洲精品动态| 福利在线免费视频| 蜜桃av一区二区在线观看| 久久99偷拍| 尤物精品在线| 捆绑调教美女网站视频一区| 亚洲精品在线观看91| 国产精品99精品一区二区三区∴| 久久五月天小说| 国产乱码精品一区二区亚洲| 丝袜美腿一区| 91嫩草精品| 99久精品视频在线观看视频| 日韩成人午夜精品| 亚洲高清av| 欧美黄色一区二区| 国产免费成人| 久久久久久网| 日韩中文字幕一区二区高清99| 亚洲黄色中文字幕| 日本免费一区二区视频| 久久中文字幕av| 日韩不卡免费视频| 黄色不卡一区| 精品理论电影在线| 亚洲天堂日韩在线| 久久青草久久| 嫩草伊人久久精品少妇av杨幂| 国产农村妇女精品一区二区| 精品三级av| 日韩在线观看一区二区三区| 99精品视频精品精品视频| 国产精品nxnn| 色综合视频一区二区三区日韩| 香蕉成人av| 久久这里只有|