午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作

Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作

熱門標(biāo)簽:南昌地圖標(biāo)注 成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 地圖標(biāo)注與注銷 電梯新時(shí)達(dá)系統(tǒng)外呼顯示e 旅游廁所地圖標(biāo)注怎么弄 宿州電話機(jī)器人哪家好 西青語音電銷機(jī)器人哪家好 無錫智能外呼系統(tǒng)好用嗎 百應(yīng)電話機(jī)器人總部

前言

繼續(xù)上面一篇文章的內(nèi)容,本文介紹多表操作。使用django ORM可以創(chuàng)建多表關(guān)系,并且也支持多張表之間的操作,以創(chuàng)建表關(guān)系和查詢兩部分說明django ORM的多表操作。以作者、圖書、出版社和作者信息幾張表作為案例進(jìn)行說明。

創(chuàng)建表關(guān)系

注意:在實(shí)際開發(fā)中不推薦使用外鍵建立表關(guān)系即不使用級聯(lián)更新和級聯(lián)刪除,而是推薦使用邏輯上的外鍵關(guān)系建立表關(guān)系。

上述的四張表中,圖書和出版社這兩表的關(guān)系屬于一對多的關(guān)系,外鍵建立在查詢頻率高的一方。作者和作者詳情表屬于一對一關(guān)系,外鍵建立在查詢頻率高的一方,作者和圖書屬于多對多關(guān)系,需要第三張表存儲關(guān)系,建議將外鍵建在查詢頻率高的一方。創(chuàng)建表時(shí)一定要執(zhí)行數(shù)據(jù)庫遷移命令哦~

創(chuàng)建表關(guān)系時(shí)可以先將表模型創(chuàng)建出來,然后再添加外鍵字段,另外在使用django ORM創(chuàng)建外鍵關(guān)系時(shí),關(guān)聯(lián)的外鍵字段會自動在字段后加_id,表與表之間的關(guān)系默認(rèn)以主鍵作為關(guān)聯(lián)字段。另外在創(chuàng)建表關(guān)系時(shí),不建議使用實(shí)質(zhì)的外鍵進(jìn)行關(guān)聯(lián),而是通過使用邏輯上的關(guān)系來指定表關(guān)系。

class Book(models.Model):
    name = models.CharField(max_length=60, verbose_name='圖書名')
    # 浮點(diǎn)數(shù)字段,max_digits表示數(shù)字共8位, decimal_place表示小數(shù)點(diǎn)占2位
    price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='圖書價(jià)格')
    inventory_num = models.IntegerField(verbose_name='庫存數(shù)量')
    sell_num = models.IntegerField(verbose_name='賣出數(shù)量')
    # 一對多關(guān)系外鍵字段創(chuàng)建使用 ForeigenKey(to='表名'),默認(rèn)關(guān)聯(lián)主鍵字段, db_constraint=Flase表示不建立實(shí)質(zhì)的外鍵關(guān)系,只是邏輯上的關(guān)系
    publish = models.ForeignKey(to='Publish', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外鍵關(guān)聯(lián)出版社')
    # 多對多關(guān)系,使用ManyToManyField(to='表名'),author是一個(gè)虛擬的字段,主要是用來告訴ORM,書籍和作者是多對多的關(guān)系,而且ORM會自動創(chuàng)建多對多關(guān)系的第三張
    author = models.ManyToManyField(to='Author', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外鍵關(guān)聯(lián)作者')


class Publish(models.Model):
    name = models.CharField(max_length=12, verbose_name='出版社名稱')


class Author(models.Model):
    name = models.CharField(max_length=10, verbose_name='作者名稱')
    # 一對一關(guān)系使用OneToOneField(to='表名')
    author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.DO_NOTHING, db_constraint=False, verbose_name='外間關(guān)聯(lián)作者詳情')


class AuthorDetail(models.Model):
    age = models.IntegerField(verbose_name='年齡')
    phone = models.CharField(max_length=11, verbose_name='手機(jī)號')

另外還需補(bǔ)充一點(diǎn),多對多的表關(guān)系共有三種創(chuàng)建方式,分別是全自動創(chuàng)建、半自動創(chuàng)建和全手動創(chuàng)建:

# 全自動創(chuàng)建 - ManyToManyField,一般這種方式可以滿足需求
'''
使用全自動創(chuàng)建多對多關(guān)系的優(yōu)點(diǎn)就是無需手動創(chuàng)建第三張表,非常方便,django ORM直接提供操作第三張表關(guān)系的方法
缺點(diǎn)就是無法擴(kuò)展第三張關(guān)系表
'''
class Book(models.Model):
 name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author')
    
class Author(models.Model):
    name = models.CharField(max_length=32)
    
    
    
# 純手動創(chuàng)建 -  ForeignKey手動創(chuàng)建第三張表
'''
第三張表完全取決于手動的擴(kuò)展,但是需要寫的代碼較多,而且無法使用ORM提供的簡單方法
'''
class Book(models.Model):
    name = models.CharField(max_length=32)
    
class Author(models.Model):
 name = models.CharField(max_length=32)
 
class Book2Author(models.Model):
    book_id = models.ForeignKey(to='Book')
    author_id = models.ForeignKey(to='Author')
    
# 半自動創(chuàng)建,通過ManyToManyField的參數(shù)控制第三張表
class Book(models.Model):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(
        to='Author', # 告訴ORM不需要自動幫忙創(chuàng)建第三張關(guān)系表
        through='Book2Author', # 告訴ORM第三張關(guān)系表對應(yīng)的表的外鍵字段
        through_fields=('book','author')  # 通過哪兩個(gè)字段關(guān)聯(lián)表,當(dāng)前在哪張表,就先寫哪個(gè)表的關(guān)聯(lián)字段
                                     )
class Author(models.Model):
    name = models.CharField(max_length=32) 
    
class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')

多表數(shù)據(jù)操作 - 增刪改

首先介紹多表操作的增刪改操作,因?yàn)槎啾淼牟樵償?shù)據(jù)操作稍微麻煩一點(diǎn),單獨(dú)另外開小灶。

一對多一對一關(guān)系 - 增刪改

一對一和一對多的增刪改操作基本是一致的。

增加數(shù)據(jù)

增加數(shù)據(jù)有兩種方式,一種方式是通過實(shí)際字段來添加,另一種方式是通過虛擬字段對象賦值添加。

# 方式1:通過實(shí)際字段
book_obj = models.Book.objects.create(name='哈利波特', price=10.2, publish_id=1)

# 方式2,先獲取出版社對象,再將書籍和出版社通過出版社對象進(jìn)行關(guān)聯(lián)
publis_obj = models.Publish.objects.filter(pk=1).first()
book_obj = models.Book.objects.create(name='哈利波特', price=10.2, publish=publis_obj)

刪除數(shù)據(jù)

需要說明一點(diǎn),在實(shí)際項(xiàng)目開發(fā)中刪除數(shù)據(jù)并不是真的刪除了,而是使用一個(gè)布爾類型的字段標(biāo)識該數(shù)據(jù)是否刪除。
刪除數(shù)據(jù)的時(shí)候如果不指定on_delete=models.DO_NOTHING默認(rèn)是級聯(lián)更新級聯(lián)刪除的。

models.Publish.objects.filter(pk=1).delete()

修改數(shù)據(jù)

修改數(shù)據(jù)同增加數(shù)據(jù)一樣有兩種方式。

# 方式1
models.Book.objects.filter(pk=1).update(publish_id=1)

# 方式2
pub_obj = models.Publish.objects.filter(pk=2).first()
models.Book.objects.filter(pk=1).update(publish=pub_obj)

多對多關(guān)系 - 增刪改

首先需要明確的是,多對多的增刪改是在操作第三張關(guān)系表,但是第三張關(guān)系表是django自動創(chuàng)建的,如何通過代碼進(jìn)入第三張表呢?多對多的外鍵關(guān)系被建在book表,多對多的外鍵字段是author字段,因此通過book_obj.author即可操作第三張表了。
對于django自動創(chuàng)建的第三張表的多對多關(guān)系,django提供了額外的方法對數(shù)據(jù)進(jìn)行操作。

增加多對多關(guān)系 - add()

add()方法給第三張關(guān)系表添加數(shù)據(jù),括號內(nèi)既可以傳數(shù)字也可以傳對象,并且都支持多個(gè)同時(shí)操作。

# 方式1,直接添加id值
book_obj = models.Book.objects.filter(pk=1).first()
book_obj.author.add(1)  # 增加 1 1記錄,即id為1的書綁定id為1的作者
book_obj.author.add(2, 3)   # 增加兩條記錄,1 2 和 1 3

# 方式2,通過對象添加關(guān)系
book_obj = models.Book.objects.filter(pk=2).first()
author_obj1 = models.Author.objects.filter(pk=1).first()
author_obj2 = models.Author.objects.filter(pk=2).first()
author_obj3 = models.Author.objects.filter(pk=3).first()
book_obj.author.add(author_obj1)    # 增加1條記錄
book_obj.author.add(author_obj2, author_obj3) # 增加2條

刪除多對多關(guān)系 - remove()

remove()方法用來為第三張表刪除數(shù)據(jù),同樣的,括號內(nèi)既可以傳數(shù)字也可以傳對象,并且支持多條數(shù)據(jù)同時(shí)操作。

# 方式1:直接刪除值
book_obj = models.Book.objects.filter(pk=1).first()
book_obj.author.remove(2)  # 刪除book_id為1和author_id都為2的記錄
book_obj.authors.remove(1, 3)  # 刪除多條

# 方式2:通過對象刪除
author_obj1 = models.Author.objects.filter(pk=2).first()
author_obj2 = models.Author.objects.filter(pk=3).first()
book_obj.authors.remove(author_obj1, author_obj2)

修改多對多關(guān)系 - set()

set()方法用來修改第三張表,該方法是一個(gè)覆蓋操作,用新的關(guān)系覆蓋之前的關(guān)系,該方法的參數(shù)必須是一個(gè)列表或者元組,指出數(shù)字或?qū)ο螅仓С侄鄺l數(shù)據(jù)同時(shí)操作。

# 方式1:直接通過值進(jìn)行修改
book_obj = models.Book.objects.filter(pk=1).first()
book_obj.author.set([2])  # 將book_id為1對應(yīng)的author_id修改為2
book_obj.authors.set([1, 2])  # 將書的作者設(shè)置為id=1 和id=2的作者

# 方式2:通過對象進(jìn)行修改
author_obj2 = models.Author.objects.filter(pk=2).first()
author_obj3 = models.Author.objects.filter(pk=3).first()
book_obj.authors.set([author_obj2, author_obj3])

清空第三張表某個(gè)對象的綁定關(guān)系 - clear()

clear()方法會清空第三張關(guān)系表中某個(gè)對象的綁定關(guān)系。

book_obj = models.Book.objects.filter(pk=1).first()
book_obj.author.clear()

多表查詢

在進(jìn)行多表查詢操作前,需要了解一個(gè)概念,什么是正向查詢和反向查詢。

  • 正向查詢:外鍵在哪個(gè)表中,查詢關(guān)聯(lián)的表就是正向查詢,比如通過書籍查詢出版社;
  • 反向查詢:被關(guān)聯(lián)的表查外鍵字段所在的表就是反向查詢,比如通過出版社查詢書籍。

子查詢

如果查詢比較復(fù)雜時(shí)可以采用子查詢的方式,子查詢就是分步驟查詢的意思,先查詢得到的結(jié)果作為后查詢的條件。

正向查詢

正向查詢按字段,如果有多個(gè)結(jié)果需要外鍵字段.all(),那么怎么判斷查詢的結(jié)果有多個(gè)呢?如果在不加.all()的情況下得到的結(jié)果是應(yīng)用名.模型名.None比如first.Author.None這種情況下說明ORM 語句沒有錯誤,只是查詢到的結(jié)果有多個(gè),就需要加.all()。當(dāng)查詢結(jié)果只有一個(gè)時(shí)得到的是一個(gè)模型對象,如果為多個(gè)就是QuerySet對象。

# 一對多關(guān)系查詢:查詢書籍主鍵為1的書籍由哪個(gè)出版社出版
book_obj = models.Book.objects.filter(pk=1).first()
res = book_obj.publish  # Publish object (1)
print(res.name)

# 多對多關(guān)系查詢:查詢數(shù)據(jù)主鍵為1的作者
book_obj = models.Book.objects.filter(pk=1).first()
res = book_obj.author  # first.Author.None,說明結(jié)果有多個(gè)
res_many = book_obj.author.all()  # QuerySet [Author: Author object (1)>, Author: Author object (2)>]>
    
# 一對一關(guān)系查詢:查詢作者lili的年齡
author_obj = models.Author.objects.filter(name='lili').first()
res = author_obj.author_detail
print(res.phone)

反向查詢

反向查詢?nèi)绻且粚σ坏脑捠潜砻懀绻且粚Χ嗷蛘叨鄬Χ鄷r(shí)反向查詢是表明小寫——set,另外如果有多個(gè)結(jié)果需要在表明小寫后再加_set.all(),判斷結(jié)果是否有多個(gè)的方法與正向查詢相同。當(dāng)查詢結(jié)果只有一個(gè)時(shí)得到的是一個(gè)模型對象,如果為多個(gè)就是QuerySet對象。

# 一對多關(guān)系查詢,查詢出版社是東方出版社出版的書
publish_obj = models.Publish.objects.filter(name='東方').first()
res = publish_obj.book_set.all()  # QuerySet [Book: Book object (1)>, Book: Book object (2)>]>

# 多對多關(guān)系查詢,查詢作者是lili寫過的書
author_obj = models.Author.objects.filter(name='lili').first()
res = author_obj.book_set  # first.Book.None,說明有多個(gè)結(jié)果
res_many = author_obj.book_set.all()
print(res_many)  # QuerySet [Book: Book object (1)>]>

# 一對一關(guān)系查詢,查詢手機(jī)號是119的作者
author_detail_obj = models.AuthorDetail.objects.filter(phone='119').first()
res = author_detail_obj.author
print(res.name)

聯(lián)表查詢

聯(lián)表查詢就是像MySQ里面SQL語句的聯(lián)表查詢一樣,只不過在django的ORM里面使用基于雙下劃線聯(lián)表查詢(跨表查詢)。聯(lián)表查詢的可以使用一行代碼查詢結(jié)果,聯(lián)表查詢也遵循正反向關(guān)系。

正向查詢

# 一對多關(guān)系查詢:查詢書籍主鍵為1的出版社名稱和書名
# 首先獲取書籍對象,書籍是查詢publish的基表,因此獲取書名直接values('names')即可,而出版社的名字是通過外鍵字段跳到出版社的表中農(nóng),需要通過__找到需要的字段值
res = models.Book.objects.filter(pk=1).values('name', 'publish__name')  # QuerySet [{'name': '哈利波特', 'publish__name': '東方'}]>

# 多對多關(guān)系查詢,查詢書籍主鍵為1的作者姓名
res = models.Book.objects.filter(pk=1).values('author__name')  # QuerySet [{'author__name': 'lili'}, {'author__name': 'nana'}]>

# 一對一關(guān)系查詢,查詢lili的手機(jī)號和姓名
res = models.Author.objects.filter(name='lili').values('name', 'author_detail__phone').first()
print(res.get('name'), res.get('author_detail__phone'))

反向查詢

# 一對多關(guān)系查詢:查詢數(shù)據(jù)主鍵為1的出版社名稱和書的名字
res = models.Publish.objects.filter(book__id=1).values('name', 'book__name')  # QuerySet [{'name': '東方', 'book__name': '哈利波特'}]>

# 多對多關(guān)系查詢:查詢書籍主鍵為1的作者姓名和書名
res = models.Author.objects.filter(book__id=1).values('name', 'book__name')  # QuerySet [{'name': 'lili', 'book__name': '哈利波特'}, {'name': 'nana', 'book__name': '哈利波特'}]>

# 一對一關(guān)系查詢:查詢作者id是1作者的姓名和手機(jī)號
res = models.AuthorDetail.objects.filter(author__id=1).values('author__name', 'phone')  # QuerySet [{'author__name': 'lili', 'phone': '119'}]>

# 綜合大查詢:查詢書籍主鍵是1的作者的手機(jī)號,首先獲取書籍對象,書籍關(guān)聯(lián)了作者表,作者表又關(guān)聯(lián)了作者詳情表 
res = models.Book.objects.filter(pk=1).values('author__author_detail__phone')  # QuerySet [{'author__author_detail__phone': '119'}, {'author__author_detail__phone': '120'}]>

聚合查詢

聚合查詢通常情況下是配合分組一起使用的,聚合查詢就是用一些統(tǒng)計(jì)工具,比如最大值,最小值,平均值等,聚合函數(shù)的導(dǎo)入方式from django.db.models import Max, Min, Sum, Count, Avg,如果在不分組的情況下使用聚合函數(shù)需要在aggregate()方法內(nèi)使用。

from django.db.models import Min,Max,Sum,Count,Avg
# 統(tǒng)計(jì)書的平均價(jià)格
res = models.Book.objects.aggregate(Avg('price'))
print(res)
# 可以將這些聚合函數(shù)同時(shí)使用
res = models.Book.objects.aggregate(Max('price'),Sum('price'),Count('pk'))
print(res)

分組查詢

聚合函數(shù)通常和分組一起使用,分組查詢的方法是annotate,默認(rèn)以models.分組依據(jù)作為分組依據(jù),即表的主鍵進(jìn)行分組,如果annotate()方法前面出現(xiàn)了values()那么就會按照values中指定的值進(jìn)行分組。分組查詢支持__跨表查詢。

from django.db.models import Sum, Max, Min, Avg, Count

# 1.統(tǒng)計(jì)每本書的作者個(gè)數(shù)
res = models.Book.objects.annotate(author_num=Count('author')).values('name', 'author_num')  # author_num是自己定義的字段用來存儲統(tǒng)計(jì)出來的每本書對應(yīng)的作者個(gè)數(shù),暫時(shí)存為表中的字段

# 2.統(tǒng)計(jì)每個(gè)出版社賣的最便宜的書的價(jià)格
res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')

# 3.統(tǒng)計(jì)不止一個(gè)作者的圖書
# 先按照圖書分組,算出每本書的作者數(shù)量,再過濾出作者數(shù)量大于1的數(shù)據(jù)
res = models.Book.objects.annotate(author_num=Count('author')).filter(author_num__gt=1).values('name', 'author_num')

# 4.查詢每個(gè)作者出版書的總價(jià)格
res = models.Author.objects.annotate(sum_price=Sum('book__price')).values('name', 'sum_price')

F與Q查詢

F查詢

F查詢可以獲得表中某個(gè)字段的數(shù)據(jù)值,尤其適合表中兩個(gè)字段之間的比較運(yùn)算,在操作字符類型的數(shù)據(jù)時(shí),F(xiàn)不能直接做字符串的拼接,需要借助Concat和Value。

from django.db.models import F

# 1.查詢賣出數(shù)量大于庫存數(shù)量的書籍
res = models.Book.objects.filter(sell_num__gt=F('inventory_num'))

# 將所有書籍的價(jià)格提升20元
res = models.Book.objects.update(price=F('price')+20)

F查詢對于字符串的操作需要借助Concat和Value兩個(gè)方法:

# 將所有書的名稱后面加上爆款兩個(gè)字
from django.db.models.functions import Concat
from django.db.models import F, Value

models.Book.objects.update(name=Concat(F('name'),Value('爆款')))

Q查詢

使用filter()進(jìn)行條件過濾時(shí),采用的是邏輯與and的操作,如果想要將多個(gè)篩選條件更改為or或者not的關(guān)系則需要借助Q查詢。在Q查詢中|表示or的關(guān)系,~表示not的關(guān)系。

import django.db.models import Q

# 查詢賣出數(shù)量大于100或者價(jià)格小于20的書籍
res = models.Book.objects.filter(~Q(sell_num__gt=100) | Q(price__lt=20))

另外Q查詢還有另一個(gè)比較高級的用法,就是可以將查詢條件的左邊也變成字符串的形式。

# 先產(chǎn)生一個(gè)Q的實(shí)例
q = Q()
# 修改q的連接條件的關(guān)系
q.connector = 'or'
q.children.append(('sell_num__gt',100))
q.children.append(('price__lt',200))
res = models.Book.objects.filter(q)
# filter的條件是Q實(shí)例化產(chǎn)生的對象,每個(gè)條件默認(rèn)還是and關(guān)系,可以修改
print(res)

django開啟事務(wù)

MySQL為了保證數(shù)據(jù)的安全有一個(gè)事務(wù)的機(jī)制,django既然能夠連接MySQL那么django就可以支持MySQL的事務(wù)機(jī)制。下述代碼就是在django中開啟事務(wù):

from django.db import transaction

try:
    with transaction.atomic():   # 在with代碼快內(nèi)書寫的所有orm操作都屬于同一個(gè)事務(wù)
        ...
except Exception as e:
    print(r)
...

到此這篇關(guān)于Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作的文章就介紹到這了,更多相關(guān)Django 多表操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

您可能感興趣的文章:
  • Django之模型層多表操作的實(shí)現(xiàn)
  • django 多對多表的創(chuàng)建和插入代碼實(shí)現(xiàn)
  • django多對多表的創(chuàng)建,級聯(lián)刪除及手動創(chuàng)建第三張表
  • 解決django中ModelForm多表單組合的問題
  • Django實(shí)現(xiàn)一對多表模型的跨表查詢方法
  • Django框架多表查詢實(shí)例分析
  • 在Django同1個(gè)頁面中的多表單處理詳解

標(biāo)簽:西安 許昌 雅安 濰坊 贛州 辛集 七臺河 渭南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作》,本文關(guān)鍵詞  Django,模型,層,實(shí)現(xiàn),多表,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作》相關(guān)的同類信息!
  • 本頁收集關(guān)于Django模型層實(shí)現(xiàn)多表關(guān)系創(chuàng)建和多表操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品少妇自拍| 天天操,天天操| 青青草原成人网| 国产精品人人爽人人爽| 成人高清在线观看视频| 香港三级日本三级| 国产一区二区三区视频播放| 麻豆一区产品精品蜜桃的特点| 日本污视频在线观看| 亚洲精品一区二三区| 91片黄在线观看喷潮| 亚洲乱熟女一区二区| 日韩中文字幕亚洲一区二区va在线| 国内精品国产三级国产a久久| 波多野洁衣一区| 国产精品卡一卡二| 五月天一区二区三区| 欧美日韩一二三四五区| 日韩欧美精品在线| 在线精品视频视频中文字幕| 欧美激情国产精品| 国产91精品不卡视频| 亚洲自拍偷拍福利| 日韩在线电影一区| 91丨porny丨探花| 亚洲精品自拍网| 大地资源二中文在线影视观看| 5566中文字幕| 国产在线观看第一页| 二区三区在线视频| 国产高清精品在线| 136国产福利精品导航| 在线区一区二视频| 日韩麻豆第一页| 久久久久久九九九| av在线不卡一区| 黄色一级片网址| 欧美伦理片在线观看| 日本黄色特级片| 91香蕉在线视频| 丰满人妻一区二区三区无码av| 国产乱码精品一区二区三区五月婷 | 韩国无码av片在线观看网站| av在线免费看片| 超碰人人干人人| 国产99免费视频| 日日夜夜免费精品| 久久精品欧美一区二区三区不卡| 婷婷夜色潮精品综合在线| 日韩一级视频免费观看在线| 大胆人体色综合| 亚洲a级在线播放观看| 中文字幕一区二区三区四区五区| 色免费在线视频| 欧美美女性生活视频| 91福利在线观看视频| 国产一区二区三区四区五区美女| 亚洲视频 欧洲视频| 欧美一区二区三区成人| 欧美成人免费观看| 高清视频在线观看一区| 国产69精品久久久久久久| 一本加勒比波多野结衣| 日韩精品在线观看免费| 日韩不卡免费视频| 国产精品久久久久毛片软件| 欧美精品777| 九九九久久国产免费| 国产精品免费在线| 国产二区视频在线播放| 99久久精品免费视频| 91超薄丝袜肉丝一区二区| 高清不卡在线观看av| 欧美日韩国产色| 国产一区二区精品丝袜| 国产在线精品自拍| 老司机午夜免费福利视频| jjzzjjzz欧美69巨大| 成人午夜淫片100集| 免费高清视频精品| 尤物视频一区二区| 精品中文视频在线| 国产日韩视频在线观看| 久久亚洲国产成人精品无码区| 性囗交免费视频观看| 成年人视频免费| 国产成人精品aa毛片| 天天色综合成人网| 色综合伊人色综合网站| 国产精品久久久一区二区三区| 中国丰满人妻videoshd| 欧美日韩色视频| 五月婷中文字幕| 亚洲视频你懂的| 日韩av网站大全| 国产在线拍偷自揄拍精品| 青青青在线视频播放| 亚洲色图 激情小说| 亚洲乱码国产乱码精品精软件| 中文字幕免费在线观看视频一区| 欧美岛国在线观看| 国产精品pans私拍| 国产精品成人久久电影| 看黄色录像一级片| 久久精品电影| 一区二区高清视频在线观看| 亚洲午夜小视频| 国产精品久久久久久久久婷婷| 宅男噜噜噜66国产免费观看| 国产乡下妇女做爰| 国产成人在线看| 欧美日韩三级一区| 国产不卡av在线| 久操网在线观看| 中国一级片在线观看| 免费看黄色91| 色综合久久天天综合网| 欧美激情亚洲综合一区| 亚洲欧美日韩国产yyy| 疯狂揉花蒂控制高潮h| 超碰在线观看99| 亚洲美女淫视频| 日韩一区二区福利| 日本午夜一区二区三区| 免费a v网站| 亚洲AV午夜精品| 亚洲精品菠萝久久久久久久| 色偷偷噜噜噜亚洲男人| 日韩欧美精品在线不卡 | 亚洲国产wwwccc36天堂| 理论片在线不卡免费观看| 亚洲精品成人三区| 最新中文字幕av| 日韩va欧美va亚洲va久久| 色欧美乱欧美15图片| 57pao成人永久免费视频| 97碰在线视频| 强行糟蹋人妻hd中文| 国产成人在线视频网站| 日韩女优电影在线观看| 91视频婷婷| 女人扒开腿免费视频app| 国产男男gay网站| 夜夜亚洲天天久久| 欧美国产日韩免费| 国产黄色片免费在线观看| 久久久久久久久久久久久久久久久| 国产在线国偷精品免费看| 69成人精品免费视频| 91精品中文在线| 永久av免费在线观看| 国产强伦人妻毛片| 亚洲成人第一页| 78色国产精品| 日本wwww视频| 亚洲 国产 日韩 欧美| 国产精品理论片在线观看| 精品国产一区二区三区在线观看 | 亚洲美腿欧美激情另类| 欧美另类高清视频在线| www.99热| 国产一区二区三区精品视频| 欧美大片日本大片免费观看| 国产在线精品一区二区三区》| 亚洲av网址在线| 青娱乐精品视频| 91精品久久久久久久久99蜜臂| 亚洲在线观看视频| 午夜免费福利影院| 欧美aa在线视频| 欧美一卡2卡3卡4卡| 国产一区不卡在线观看| 久久精品视频18| 国产一区二区三区免费观看| 亚洲福利在线观看| 日本精品免费| 无码黑人精品一区二区| 99re视频精品| 中文字幕日韩在线播放| 欧美一二三不卡| 黑人精品无码一区二区三区AV| 国产精品久久久久7777按摩| 九九热这里只有精品6| 欧美变态另类刺激| 中文字幕精品无| 一区二区三区日韩欧美精品| 欧美诱惑福利视频| 欧美视频亚洲图片| 亚洲欧美日韩综合在线| 欧美一区二区视频在线观看2022 | 国产日韩欧美在线看| 日本精品一二三| 欧美aaa在线| 亚洲激情第一页| 亚洲一区bb| 成年免费在线观看| 亚洲免费在线观看| 国产激情综合五月久久| 国产麻豆剧传媒精品国产| 少妇精品高潮欲妇又嫩中文字幕| 欧美夫妻性生活| 欧美不卡福利| 久久精品久久国产| 亚洲乱码中文字幕| 国产精品视频区| 日韩 中文字幕| 成人午夜又粗又硬又大| 精品国产一区二区三区在线观看 | 欧美激情一区二区三区不卡| 欧美激情videoshd| 久久久久久久久久一区二区| 久热re这里精品视频在线6| 精品日本一线二线三线不卡| 亚洲一区二区自拍偷拍| 99久久精品国产亚洲| 亚洲成av人影院| av日韩免费电影| 亚洲 欧美 变态 另类 综合| 国产精品视频在线看| 欧洲午夜精品久久久| 中文字幕无码人妻少妇免费| 成人一级片网址| 欧美黑人xxx| 天天操夜夜操很很操| 激情五月激情综合网| 这里只有视频精品| 日本激情视频在线| 日本最新不卡在线| 亚洲美女久久久| 欧美v在线观看| 久久婷婷亚洲| 亚洲午夜激情免费视频| 黑森林福利视频导航| 亚洲欧洲综合在线| 亚洲女人天堂视频| 熟妇人妻va精品中文字幕 | 国产嫩草在线观看| 日韩av一区二区在线影视| 亚洲精品久久久久久久久| 久久成人福利视频| 免费国产羞羞网站视频| 亚洲精品xxxx| 久久久免费视频网站| 久久久久99| 国产亚洲精品激情久久| 日韩中文字幕二区| 久久精品国产一区二区三| 中文字幕亚洲图片| 亚洲欧美aaa| 国产成人一级电影| 高清欧美性猛交xxxx黑人猛交| 97人妻精品一区二区三区免费 | 国产一区二区三区综合| 欧美猛少妇色xxxxx| 亚洲欧洲国产视频| 久久这里都是精品| 国产精品99久久久久久人| 免费观看a级片| 亚洲女同ⅹxx女同tv| 国产 高清 精品 在线 a| 国产网站在线看| 日本高清免费不卡视频| 亚洲欧洲日韩综合二区| 国产成人麻豆精品午夜在线| 亚洲国内精品视频| 99免费视频观看| 国产精品中文字幕一区二区三区| 欧美高清第一页| 久久精品一区二区免费播放| 亚洲欧洲日韩av| 国产精品免费视频一区二区| 日韩一级在线视频| 337p亚洲精品色噜噜狠狠| 欧美男女爱爱视频| 美女国产一区二区三区| 色综合男人天堂| 国产精品一区二区无码对白| 国产欧美日韩卡一| www.久久久| 亚洲免费黄色网址| 欧美一级xxx| av免费在线播放网站| 国产盗摄女厕一区二区三区 | 一区二区三区视频免费看| 欧美日韩中文另类| 黄页网站在线观看视频| 极品销魂美女一区二区三区| 777777777亚洲妇女| 手机免费观看av| 欧美日韩亚洲国产一区| 中文字幕第一页亚洲| 久久久久久夜| 欧美激情一区二区三区在线视频观看 | 成人精品免费在线观看| 91精品国产综合久久久久久久 | 国产精品污污网站在线观看| 国产成人精品福利一区二区三区| 国产性生活视频| 欧美本精品男人aⅴ天堂| xxxx一级片| 久久亚洲精华国产精华液| 99国产高清| 亚洲午夜激情视频| 国产亚洲欧洲高清一区| 亚洲一级av无码毛片精品| 亚洲精品乱码久久久久久| 亚洲ai欧洲av| 五月激情婷婷网| 久久久亚洲国产| 欧美国产日韩在线观看成人| 欧美日韩国产首页| 毛片一区二区三区四区| 99精品热视频| 国产精品播放| 999久久久久| 伦伦影院午夜日韩欧美限制| 亚洲精品国产91| 一本色道a无线码一区v| 欧美狂野激情性xxxx在线观| 国产伦精品一区二区三区免费迷 | 黄色一级一级片| www国产亚洲精品久久麻豆| 国产chinese精品一区二区| 国产视频一区二区三| 久久精品99国产精品酒店日本| 国产精品无码午夜福利| 欧美日韩国产在线看| 国产精品国产对白熟妇| 成人免费视频视频| αv一区二区三区| 97人妻精品一区二区三区软件| 日韩中文在线视频| 人妻熟人中文字幕一区二区| 欧美天堂一区二区三区| 国产欧美亚洲日本| 69精品丰满人妻无码视频a片| 亚洲一区二区在线看| 中文字幕日韩精品无码内射| 国产精品自拍片| 性久久久久久久久久| 久草视频在线观| 国产内射老熟女aaaa∵| 99精品黄色片免费大全| 亚洲成国产人片在线观看| 91精品国产色综合久久不卡电影 | 国产成人免费视频| 91夜夜未满十八勿入爽爽影院 | 国产精品久久久久aaaa| 午夜精品短视频| 美女精品一区二区| 成人性生交xxxxx网站| 国产精品特级毛片一区二区三区| 美女精品视频一区| 精品深夜av无码一区二区老年| 亚洲第一免费播放区| 亚洲一区二区三区无码久久| 色噜噜久久综合| 免费一区二区三区在线观看| 亚洲免费观看高清完整版在线观看熊| 欧美精品一区二区性色a+v| 成人永久免费视频| 欧美一区二视频在线免费观看| 免费看欧美女人艹b| 亚洲尤物视频网| 天天操天天干天天操| 国产成人精品免费视频| 一个人看的www日本高清视频| 久久成年人免费电影| 日韩美女黄色片| 在线免费观看羞羞视频一区二区| 久久av红桃一区二区禁漫| 亚洲成人黄色在线观看| 91l九色lporny| 欧美哺乳videos| 波多野结衣av在线观看| 欧美日韩日日夜夜| 95视频在线观看| 在线观看av一区二区| 青青草精品在线| 日本丶国产丶欧美色综合| www.成年人| 欧美性少妇18aaaa视频| 狠狠干狠狠操视频| 欧美日韩国产在线播放| 肉色超薄丝袜脚交| 色婷婷综合五月| 中文字幕第六页| 在线观看三级视频欧美| www.四虎精品| 欧美日韩高清在线播放| 精品无码人妻少妇久久久久久| 欧美天天综合网| 亚洲久久久久久| 欧美一区二区三区视频免费| 国产男女猛烈无遮挡a片漫画| 91精品国产综合久久香蕉的特点 | 亚洲第一页在线观看| 日本乱人伦a精品| 亚洲成人第一区| 国产综合久久久久久| 视频在线观看一区| 国产精品一区二区在线观看| 国产综合久久久久久鬼色| 免费99视频| 94色蜜桃网一区二区三区| 福利在线小视频| 综合色中文字幕| 杨幂毛片午夜性生毛片 | 欧美精品福利在线| 在线观看中文字幕av|