国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

盤點Flask與數據庫的交互插件--Flask-Sqlalchemy

運維 數據庫運維
在我們做web開發的時候,經常需要用到與數據庫交互,因為我們的數據通常都是保存在數據庫中的,如果有人需要訪問,就必須與數據庫訪問,所以今天我們介紹一個Flask中與數據庫交互的插件---Flask-Sqlalchemy。

[[418400]]

大家好,我是Python進階者。

前言

在我們做web開發的時候,經常需要用到與數據庫交互,因為我們的數據通常都是保存在數據庫中的,如果有人需要訪問,就必須與數據庫訪問,所以今天我們介紹一個Flask中與數據庫交互的插件---Flask-Sqlalchemy。

一、安裝并導入

  1. pip install flask-sqlalchemy 
  2.  
  3. from flask_sqlalchemy import SQLAlchemy 
  4. import os 
  5. import pymysql as p 
  6. from flask import Flask 

二、基本用法

今天我們要了解的是Mysql數據庫,所以這里重點介紹連接Mysql數據庫的方法。

1.連接數據庫

1).寫在配置文件中然后讀取

首先創建一個配置文件"config.py",內容為:

  1. db_type='mysql' 
  2. db_conn='pymysql' 
  3. host='127.0.0.1' 
  4. username='root' 
  5. password='123456' 
  6. port='3306' 
  7. db_name='people' 
  8. SQLALCHEMY_DATABASE_URI='{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(db_type,db_conn,username,password,host,port,db_name) 
  9. SQLALCHEMY_COMMIT_ON_TEARDOWN=False 
  10. SQLALCHEMY_TRACK_MODIFICATIONS=True 

然后在應用中導入配置文件:

  1. from flask_sqlalchemy import SQLAlchemy 
  2. from flask import Flask 
  3. import config 
  4. app=Flask(__name__) 
  5. app.config.from_object(config) # 連接數據庫配置文件 
  6. db=SQLAlchemy(app) 
  7. db.create_all()  # 創建所有的數據庫 

2).直接寫在應用中讀取

  1. app=Flask(__name__) 
  2. p.install_as_MySQLdb()   # mysql連接器,因為不支持py3版本,所以必須加上這行 
  3. app.config['SECRET_KEY']=os.urandom(50) 
  4. app.config['SQLALCHEMY_DATABASE_URI']='mysql+pymysql://root:123456@127.0.0.1:3306/people' 
  5. app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True   # 每次請求結束后都會自動提交數據庫中的變動 
  6. app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 動態追蹤修改設置,如未設置只會提示警告 
  7. db = SQLAlchemy(app) 

還有許多其它的配置參數,比如:

  1. SQLALCHEMY_NATIVE_UNICODE    # 可以用于顯式禁用原生 unicode 支持 
  2. SQLALCHEMY_POOL_SIZE         # 數據庫連接池的大小,默認是引擎默認值(5)  
  3. SQLALCHEMY_POOL_TIMEOUT      # 設定連接池的連接超時時間,默認是 10 
  4. SQLALCHEMY_POOL_RECYCLE      # 多少秒后自動回收連接,mysql默認為2小時 
  5. SQLALCHEMY_RECORD_QUERIES    # 可以用于顯式地禁用或啟用查詢記錄 
  6. SQLALCHEMY_ECHO              # 為Ture時用于調試,顯示錯誤信息 
  7. SQLALCHEMY_BINDS             # 一個映射 binds 到連接 URI 的字典 

3).使用獨特的創建引擎

  1. from sqlalchemy import create_engine 
  2. # echo參數為True時,會顯示每條執行的SQL語句,為False時關閉 
  3. engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/people',echo=True
  4. engine.connect() 

這樣我們就算與People數據庫建立連接了,接下來我們來建立一張表。

4).創建連接多個數據庫

  1. app.config['SQLALCHEMY_BINDS']={ 
  2. 'users'"mysql+pymysql://root:123456@127.0.0.1:3306/user"
  3.     'admin''sqlite://C:/Users/Administrator/Desktop/admin'
  4.     'buy':   'postgresql://root:123321@127.0.0.1/buy' 

然后引用表:

  1. db.create_all(bind=['users']) 
  2. db.create_all(bind='admin'

指定Users數據庫中的表:

  1. __bind_key__ = 'users' 
  2. bind key 內部存儲在表的 info 字典中  即:info={'bind_key''users'

2.建立數據表并插入值

1).繼承"db.Model"類

  1. from flask_sqlalchemy import SQLAlchemy 
  2. from flask import Flask 
  3. import config 
  4. app=Flask(__name__) 
  5. app.config.from_object(config) # 添加配置文件 
  6. db=SQLAlchemy(app) 
  7. class User(db.Model): 
  8.     __tablename__='users' 
  9.     id=db.Column(db.Integer, primary_key=True,autoincrement=True) # 整數類型的自增主鍵 
  10.     username=db.Column(db.String(100),nullable=False)  # 字符類型不為空 
  11.     password=db.Column(db.String(100),nullable=False)  # 字符類型不為空 
  12.  
  13.     def __init__(self,username,password): 
  14.         self.username=username 
  15.         self.password=password 
  16.  
  17.     def __repr__(self): 
  18.         # 打印當前類名和它的實例化后的值 
  19.         return ' %s is %r' %(self.__class__.__name__,self.username)  
  20.      
  21.      
  22. # 請求鉤子,第一次請求之前執行 
  23. @app.before_first_request 
  24. def create_table():  
  25.     db.drop_all()  # 刪除所有表 
  26.     db.create_all() # 創建新的表 
  27.  
  28.      
  29. @app.route('/'
  30. def create(): 
  31.     use1= User('hwhrr''123321')   
  32.     use2= User('hwzjj''123456'
  33.     use3= User('hwzzz''654321'
  34.     db.session.add_all([use1,use2,use3]) # 添加所有的用戶,添加一個用戶去掉_all后面加一個元祖即可  
  35.     db.session.commit()  # 提交數據 
  36.     return use1.__repr__() # 返回用戶1的值 
  37.  
  38. if __name__ == '__main__':   
  39.     app.run(debug=True

  1. Column        參數列表   
  2. name          列名 
  3. type_         類型 
  4. *args         列表參數 
  5. Constraint(約束), ForeignKey(外鍵), ColumnDefault(默認), Sequenceobjects(序列)定義 
  6. key         列名的別名 
  7. primary_key 如果為True,則是主鍵 
  8. nullable    如果是True,則可以為null 
  9. default     設置默認值,默認是None 
  10. index       是否是索引,默認是True 
  11. unique      是否唯一鍵,默認是False 
  12. onupdate    指定一個更新時候的值 
  13. autoincrement 設置為整型自動增長 
  14. quote         如果列明是關鍵字,則強制轉義,默認False 

2).利用原始引擎來創建會話(稍微復雜點)

  1. from flask import Flask 
  2. from sqlalchemy import create_engine 
  3. from sqlalchemy.orm import sessionmaker 
  4. from sqlalchemy.ext.declarative import declarative_base 
  5. from sqlalchemy import ColumnInteger, String 
  6. app=Flask(__name__) 
  7. Base = declarative_base() 
  8. # 創建連接數據庫的引擎并且打開回顯 
  9. engine = create_engine("mysql+pymysql://root:123456@localhost/people",echo=True
  10. Session = sessionmaker(bind=engine) # 創建會話標記 
  11. class User(Base): 
  12.     __tablename__ = 'article' 
  13.     id = Column(Integer, primary_key=True,autoincrement=True
  14.     username = Column(String(100),nullable=False
  15.     password = Column(String(100),nullable=False
  16.     def __init__(self, username,password): 
  17.         self.username = username 
  18.         self.password=password 
  19.     def __repr__(self): 
  20.         return ' %s is %r' %(self.__class__.__name__,self.username) 
  21.      
  22. @app.before_first_request 
  23. def create_table(): 
  24.     Base.metadata.drop_all(engine) # 刪除所有數據庫 
  25.     Base.metadata.create_all(engine) # 創建所有數據庫 
  26.      
  27. @app.route('/'
  28. def index(): 
  29.     userUser("hwhrr","123321"
  30.     session = Session()   # 創建會話 
  31.     session.add(user)  # 添加內容 
  32.     session.commit()  # 提交 
  33.     return user.__repr__() 
  34.  
  35. if __name__ == '__main__':   
  36.     app.run(debug=True

3.數據庫之間的關系

1). 一對一

只需讓兩張表都在同等的位置上,屬于雙向關系。

  1. class father(db.Model): 
  2.     __tablename__='Father' 
  3.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  4.     name= db.Column(db.String(100),nullable=False
  5.     age= db.Column(db.Integer,nullable=False
  6.     #主要是要在一個表上設置uselist 然后設置back_populates的值為其它表的映射返回值 
  7.     son_fa=db.relationship('son',uselist=False, back_populates='fa_son')  
  8.     def __init__(self,name,age): 
  9.         self.name=name 
  10.         self.age=age 
  11.     def __repr__(self): 
  12.         return '%s is %r'%(self.__class__.__name__,self.name
  13.  
  14.  
  15. class son(db.Model): 
  16.     __tablename__='Son' 
  17.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  18.     name= db.Column(db.String(100),nullable=False
  19.     age= db.Column(db.Integer,nullable=False
  20.     # 這里無需設置uselist 
  21.     fa_son=db.relationship('father',back_populates='son_fa'
  22.     def __init__(self,name,age): 
  23.         self.name=name 
  24.         self.age=age 
  25.     def __repr__(self): 
  26.         return '%s is %r'%(self.__class__.__name__,self.name

2).一對多

我們需要建立一個主表和一個子表,分別命名為“father”和‘son’,然后需要建立外鍵和反射來互相引用建立一種關系,我們來看看:

  1. class father(db.Model): 
  2.     __tablename__='Father' 
  3.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  4.     name= db.Column(db.String(100),nullable=False
  5.     age= db.Column(db.Integer,nullable=False
  6.     # 表示另一端是son這個模型,backref可替代Father.id訪問father模型 
  7.     son_fa=db.relationship('son',backref='fa',lazy='dynamic'
  8.     # lazy表示加載方式: 
  9.     # dynamic:動態加載,只有用到了才加載 只可以用在一對多和多對多關系中 
  10.     # subquery:全部加載 
  11.     def __init__(self,name,age): 
  12.         self.name=name 
  13.         self.age=age 
  14.     def __repr__(self): 
  15.         return '%s is %r'%(self.__class__.__name__,self.name
  16.  
  17.  
  18. class son(db.Model): 
  19.     __tablename__='Son' 
  20.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  21.     name= db.Column(db.String(100),nullable=False
  22.     age= db.Column(db.Integer,nullable=False
  23.     f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外鍵關聯,指明表名和字段 
  24.     def __init__(self,name,age): 
  25.         self.name=name 
  26.         self.age=age         
  27.     def __repr__(self): 
  28.         return '%s is %r'%(self._class__.__name__,self.name
  29.  
  30. @app.route('/'
  31. def create(): 
  32.     use1= father('hw', 45) 
  33.     use2= son('hyy', 20) 
  34.     db.session.add_all([use1,use2]) 
  35.     db.session.commit() 
  36.     return use1.__repr__()+'\n'+use2.__repr__() 

3).多對一

就是將反射應用在子表上,與父表同時進行關聯。

  1. class father(db.Model): 
  2.     __tablename__='Father' 
  3.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  4.     name= db.Column(db.String(100),nullable=False
  5.     age= db.Column(db.Integer,nullable=False
  6.     # 表示另一端是son這個模型 
  7.     son_fa=db.relationship('son', back_populates="fath")  
  8.     def __init__(self,name,age): 
  9.         self.name=name 
  10.         self.age=age 
  11.     def __repr__(self): 
  12.         return '%s is %r'%(self.__class__.__name__,self.name
  13.  
  14.  
  15. class son(db.Model): 
  16.     __tablename__='Son' 
  17.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  18.     name= db.Column(db.String(100),nullable=False
  19.     age= db.Column(db.Integer,nullable=False
  20.     f_id=db.Column(db.Integer,db.ForeignKey('Father.id')) # 建立外鍵關聯 
  21.     # 表示另一端是father這個模型 
  22.     fa_son=db.relationship('father',back_populates="so")  
  23.     def __init__(self,name,age): 
  24.         self.name=name 
  25.         self.age=age 
  26.     def __repr__(self): 
  27.         return '%s is %r'%(self.__class__.__name__,self.name

4).多對多

設置一個關聯表來對兩個表同時進行管理。

  1. # 設置關聯表 
  2. gl=db.Table('glb'
  3.     db.Column('id',db.Integer,primary_key=True,autoincrement=True), 
  4.     db.Column('son_id',db.Integer,db.ForeignKey('Son.id')), 
  5.     db.Column('father_id',db.Integer,db.ForeignKey('Father.id')) 
  6.  
  7. # 父表 
  8. class father(db.Model): 
  9.     __tablename__='Father' 
  10.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  11.     name= db.Column(db.String(100),nullable=False
  12.     age= db.Column(db.Integer,nullable=False
  13.     # 設置關聯表 動態加載 
  14.     son_fa=db.relationship('son',secondary=gl,backref="fas",lazy="dynamic"
  15.     def __init__(self,name,age): 
  16.         self.name=name 
  17.         self.age=age 
  18.     def __repr__(self): 
  19.         return '%s is %r'%(self.__class__.__name__,self.name
  20.  
  21. # 子表 
  22. class son(db.Model): 
  23.     __tablename__='Son' 
  24.     id=db.Column(db.Integer, primary_key=True,autoincrement=True
  25.     name= db.Column(db.String(100),nullable=False
  26.     age= db.Column(db.Integer,nullable=False
  27.     def __init__(self,name,age): 
  28.         self.name=name 
  29.         self.age=age 
  30.     def __repr__(self): 
  31.         return '%s is %r'%(self.__class__.__name__,self.name

可以看出我們已經創建出了一張關聯表,名字就是我們設置的“glb”。

4.查看數據

1).查看全部數據(all)

  1. father.query.all() 

2).精準查詢(filter_by)

  1. father.query.filter_by(name='hw').all()  # 查找所有名字為hw的記錄 

3).模糊查詢(filter)

  1. father.query.filter(father.name.startswith('h').all() # 查找所有名字首字母為h的記錄 

4).主鍵查詢(get)

  1. father.query.get(1) # 查看id為1的記錄 

5).取反操作(not_)

  1. from sqlalchemy import not_ 
  2. father.query.filter(not_(father.name=='hw')).all() # 查找所有除了名字不是hw的記錄 

6).與操作(and_)

  1. from sqlalchemy import and_ 
  2. # 查找名字末尾是h并且年齡等于50的記錄 
  3. father.query.filter(and_(father.name.endswith('h'),father.age==50)).all() 

7).或操作(or_)

  1. from sqlalchemy import or_ 
  2. # 查找名字末尾是h或者年齡等于50的記錄 
  3. father.query.filter(or_(father.name.endswith('h'),father.age==50)).all() 

8).一對多正向查詢

  1. son.query.filter_by(f_id=2).all() 

9).一對多反向查詢

  1. son.query.filter_by(fa=use1).all() 

10).查詢第一個出現的數據

  1. son.query.filter(son.age==10).first() 
  2. son.query.filter(son.age==10)[0] 

11).查詢對象并返回指定數量的結果

  1. son.query.filter(son.age==10).limit(10).all() # 返回十個查找到的對象 

12).查詢時指定偏移量

  1. son.query.filter(son.age==10).offset(2).all() # 返回偏移了2的對象 

13).查找對象并排序

  1. son.query.filter(son.age==10).order_by(son.create_time.desc()).all() # 返回按降序排序的記錄 

14).查找對象返回分組結果

  1. son.query.filter(son.age==10).group_by(son.name).all() # 返回age為10的名字對象分組 

15).返回查詢結果的數量

  1. son.query.filter(son.age==10).count() # son的年齡為10的數量 

16).返回切片結果

  1. son.query(son).slice(10,40).all()   # son從10到40的記錄 
  2. son.query(son)[10:40] 

17).分頁獲取數據

  1. p=request.args.get('p'
  2. # 從請求的查詢字符串中獲取當前頁面,返回一個每頁顯示3條記錄的分頁對象 
  3. paginate=son.query.paginate(p=int(p),per_page=3)  
  4. paginate 屬性: 
  5. pages     # 總共生成頁面數量 
  6. page      # 當前頁數 
  7. has_next  # 判斷是否有下一頁 
  8. has_prev  # 判斷是否有上一頁 
  9. next_num  # 獲取下一頁的頁碼數 
  10. prev_num  # 獲取上一頁的頁碼數 
  11. items     # 獲取當前頁的記錄 
  12. total     # 查詢返回的記錄總數 

18).查詢僅顯示一條記錄

  1. son.query(son).one() 

5.更新數據

  1. ss=son.query.get(1) 
  2. ss.name='fasd'     # 更改name的值來達到更新的目的 
  3. db.session.commit() 

6.刪除數據

  1. ss=son.query.get(1) 
  2. db.session.delete(ss) 
  3. db.session.commit() 

三、總結

Sqlalchemy支持很多表的建立和操作,通過對它的了解,我們可以很方便的操作數據庫的數據從而與前端頁面交互達到可視化的效果,通過這篇文章的學習,相信你可以獨立開發一個小網站了。

本文轉載自微信公眾號「Python爬蟲與數據挖掘」,可以通過以下二維碼關注。轉載本文請聯系Python爬蟲與數據挖掘公眾號。

 

責任編輯:武曉燕 來源: Python爬蟲與數據挖掘
相關推薦

2016-11-08 10:24:37

FlaskPython插件

2023-06-08 08:13:43

2023-06-07 08:18:25

2021-09-12 17:25:12

SQLite數據庫

2023-06-09 07:55:09

2025-11-06 07:32:32

2014-12-29 10:29:40

OpenStack數據庫SQLAlchem

2015-01-12 15:07:56

SQLAlchemy數據庫開發OpenStac

2022-03-16 00:15:56

Flask擴展插件

2021-07-01 09:08:03

Python網頁開發Flask

2021-06-26 10:03:35

Python框架Flask

2024-10-30 15:53:59

2016-09-23 13:34:15

PythonORMsqlalchemy

2021-11-26 22:51:31

FlaskBlueprintsViews

2024-12-03 09:28:54

元組數據庫

2024-04-03 10:05:02

2010-06-12 14:40:28

2009-09-11 10:48:25

數據庫交互

2010-06-11 16:51:44

MySQL數據庫

2022-01-03 18:15:35

FlaskTepHttpRunner
點贊
收藏

51CTO技術棧公眾號

精品久久久香蕉免费精品视频| 99国产精品久久| 久久精品小视频| av在线app| 亚洲国产aⅴ天堂久久| 国产欧美日韩网站| 蜜桃av噜噜一区二区三区小说| 91丝袜脚交足在线播放| 国产精品欧美日韩一区| 欧美极品第一页| 成人看片在线观看| 精品国产成人系列| 在线毛片网站| 在线亚洲高清视频| 美女永久在线网站| 亚洲乱码中文字幕| 美女视频免费观看网站在线 | 欧美精品aaa| 91精品一区| 乱亲女秽乱长久久久| 日韩欧美中文字幕在线视频| 久久中国妇女中文字幕| 91精品亚洲一区在线观看| 欧美成人免费在线视频| 成人涩涩网站| 国产精品日韩电影| 亚洲东热激情| 美国av一区二区三区| 日本午夜一本久久久综合| 国产精品美女在线播放| 国产高清在线精品| 日韩精品一区二区三区色欲av| 国产精品麻豆久久久| 黄色春季福利在线看| 亚洲国产日韩综合久久精品| 国产资源在线播放| 日韩免费高清视频| 成人涩涩视频| 秋霞成人午夜鲁丝一区二区三区 | 97在线视频免费| 欧美色图一区| 久久久久久久久久久久久久一区 | 91国偷自产一区二区三区观看| 黄色在线播放| 精品久久五月天| 2019年精品视频自拍| 国内精品小视频在线观看| 欧美激情另类| 五月婷婷综合色| 久久亚洲综合色一区二区三区| ckplayer中文字幕| 欧美日韩高清不卡| 91大神在线观看线路一区| 日本久久精品视频| 久久国产66| 日韩在线xxx| 欧美又粗又大又爽| 成人午夜sm精品久久久久久久| 热久久99这里有精品| 国产精品日韩精品欧美精品| 欧美视频在线观看网站| 亚洲一区二区综合| 成人性生交大片免费看网站| 久久久久久久久久国产精品| 好吊视频一区二区三区四区| 成人黄色大片网站| 欧美日韩在线一区| 免费欧美电影| 亚洲一区二区少妇| 99精品在线免费| 国外av网站| 亚洲人成电影网站| 波多野结衣的一区二区三区| 色一情一乱一乱一区91| 亚洲国产wwwccc36天堂| 成人在线爆射| 高清一区二区三区视频| 久久久国产午夜精品| 在线看免费av| 欧美激情欧美激情在线五月| 国产日韩欧美一区二区三区在线观看| 国产淫片免费看| 欧美日韩国产美| 欧美人妖在线观看| 最新av在线免费观看| 欧美午夜影院在线视频| 欧美电影院免费观看| 久久综合九色99| 一区二区高清在线| 日韩av福利| 久热这里只精品99re8久 | 久操网在线观看| 欧美日韩在线观看一区二区 | 久草视频视频在线播放| 久久久av亚洲男天堂| 99精品热6080yy久久| 97影视在线观看| 日韩视频中文字幕| 久久久精品性| 黄色av网址在线免费观看| 日韩免费观看高清| 国产精品天天看| 欧美爱爱视频| 制服丝袜综合日韩欧美| 欧洲色大大久久| 成人激情电影在线| 日本特黄a级片| 久久成人精品视频| 美国毛片一区二区三区| 国产爆初菊在线观看免费视频网站 | 亚洲色成人www永久在线观看| 欧美乱熟臀69xxxxxx| 国产欧美一区二区精品久久久| 黄页网站大全在线观看| 亚洲国产精品久久久久秋霞不卡| 亚洲人metart人体| 四虎4hu新地址入口2023| 色伦专区97中文字幕| 精品在线播放午夜| 激情网站在线| 日韩精品久久久| 欧美色图在线观看| 99伊人成综合| 欧美激情办公室videoshd| 99在线观看| 日韩欧美国产免费播放| 五月天激情综合网| 在线播放91| 96国产粉嫩美女| 欧美三级中文字幕在线观看| 欧美午夜一区| yw视频在线观看| 精品不卡在线| 91精品福利在线一区二区三区| 一区二区三区福利| 91高清在线观看视频| 视频一区二区三区免费观看| 精品国产sm最大网站免费看 | 精品乱子伦一区二区三区| 欧美三级资源在线| 视频一区国产视频| 亚洲美女久久精品| 一女被多男玩喷潮视频| 欧美刺激性大交免费视频| 中文字幕+乱码+中文字幕一区| 日韩影视高清在线观看| 欧美艹逼视频| 国产不卡一区二区在线观看| 欧美理论电影在线| 激情五月婷婷综合网| www.久久久.com| 羞羞小视频视频| 青青草原一区二区| 欧美性videos高清精品| 一本色道久久综合| 好看的中文字幕在线播放| 热久久最新网址| 色综合久久久888| 亚洲高清中文字幕| 亚洲一级影院| 免费毛片b在线观看| 黑人糟蹋人妻hd中文字幕| 国产91精品视频在线观看| 一本到不卡免费一区二区| 美女黄色成人网| 日韩制服一区| siro系绝美精品系列| 国内精品视频免费| 在线观看精品自拍私拍| 日韩理论片网站| 野花国产精品入口| 日韩免费福利视频| 麻豆免费网站| 新呦u视频一区二区| 久久免费少妇高潮久久精品99| 色综合天天性综合| 国产裸体歌舞团一区二区| 特黄特色欧美大片| 黄色成人在线观看| 日本成人黄色网| 国产a一区二区| 中文字幕欧美国内| 亚洲国产裸拍裸体视频在线观看乱了| 免播放器亚洲| 超碰97久久| av大大超碰在线| 亚州福利视频| 亚洲成人一区二区三区| 51精品国产黑色丝袜高跟鞋| 欧美一级免费观看| 亚洲欧洲综合另类| 久久成人久久爱| 日本一二区不卡| 日本综合视频| 在线视频二区| 99.玖玖.com| 中文精品一区二区三区| 国产精品精品一区二区三区午夜版 | 久久久久久久久久久久久久久久久久 | 在线观看涩涩|