国产高清网站_亚洲一区二区综合_成人久久18免费网站_国产成人久久精品激情

您現(xiàn)在所在的位置:首頁 >學(xué)習(xí)資源 > Python全棧+人工智能入門教材 > Python基礎(chǔ)入門教程33:企業(yè)級開發(fā)進(jìn)階6:數(shù)據(jù)庫操作

Python基礎(chǔ)入門教程33:企業(yè)級開發(fā)進(jìn)階6:數(shù)據(jù)庫操作

來源:奇酷教育 發(fā)表于:

python作為一個編程語言,在開發(fā)B S或者C S結(jié)構(gòu)的軟件時,不可避免的會設(shè)計到和數(shù)據(jù)庫之間的交互操作,和其他高級的面向?qū)ο蟮恼Z言一樣,Py

python作為一個編程語言,在開發(fā)B/S或者C/S結(jié)構(gòu)的軟件時,不可避免的會設(shè)計到和數(shù)據(jù)庫之間的交互操作,和其他高級的面向?qū)ο蟮恼Z言一樣,Python在操作數(shù)據(jù)庫的過程中,盡量追求了簡潔、統(tǒng)一、易用的風(fēng)格。

本節(jié)內(nèi)容

  1. mysql數(shù)據(jù)庫連接驅(qū)動的安裝
  2. python連接mysql數(shù)據(jù)庫
  3. 增刪改查(CRUD)數(shù)據(jù)操作

    注意,關(guān)于mysql數(shù)據(jù)庫的教程,我們后續(xù)還在其他的模塊進(jìn)行總結(jié)添加,如果大家需要的話^_^畢竟現(xiàn)在網(wǎng)絡(luò)上關(guān)于這樣常規(guī)的技術(shù)教程還是非常多滴

1. mysql數(shù)據(jù)庫連接驅(qū)動的安裝

1.1. 親,請明白為什么要有數(shù)據(jù)庫連接驅(qū)動

首先:我們明白,編程語言和數(shù)據(jù)庫各自都是什么
編程語言:專門用于進(jìn)行數(shù)據(jù)處理的獨立的個體
數(shù)據(jù)庫:專門用于進(jìn)行數(shù)據(jù)儲存的獨立的個體
也就是說,編程語言和數(shù)據(jù)庫本身是兩個完全獨立的個體,為了讓數(shù)據(jù)能更加優(yōu)雅的持久的存儲和處理,編程語言就得和數(shù)據(jù)庫配合完成我們的工作

因為編程語言如果獨立處理數(shù)據(jù)的話,程序是運(yùn)行在系統(tǒng)的內(nèi)存中的,如果程序一旦終止,意味著處理的數(shù)據(jù)就會丟失。為了持久的有效的保存數(shù)據(jù),我們選擇將處理的數(shù)據(jù)保存在數(shù)據(jù)庫中

其次:編程語言,憑什么可以訪問數(shù)據(jù)庫
數(shù)據(jù)庫給編程語言專門開了一個后門(API),通過這個后門(API)就可以讓編程語言對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行增刪改查操作了。當(dāng)然,必須得拿著數(shù)據(jù)庫提供給編程語言的正確的鑰匙才是可以的哦【鑰匙:數(shù)據(jù)庫連接驅(qū)動+連接憑證】

最后:OK,此時,我們明白了,編程語言為什么和數(shù)據(jù)庫配合使用,為什么要有連接驅(qū)動,接下來,進(jìn)入我們的安裝環(huán)節(jié)

python操作數(shù)據(jù)庫,其實就是兩個獨立個體之間的數(shù)據(jù)通信,和我們現(xiàn)實生活一樣,需要中間連接兩個獨立的人之間的手機(jī)和正確的電話號碼


python連接數(shù)據(jù)庫示意圖
1.2. 親,出錯了~

安裝數(shù)據(jù)庫驅(qū)動,我們想到的第一件事應(yīng)該是搜索官方文檔或者問問度娘/谷哥,得到結(jié)果如下:

# 安裝mysql的python語言的數(shù)據(jù)庫連接驅(qū)動
pip install mysql-connector-python --allow-exrternal mysql-connector-python

請注意:如果你使用的python版本是2.7或者3.4以下版本,是不會有任何問題的,因為mysql官方提供的驅(qū)動支持的最高版本是Python2.7或者python3.4,如下圖


python驅(qū)動版本


如果你跟我一樣,在一臺電腦上安裝了python2.7和python3.6的版本,尤其是目前使用的是python3.6的版本,上述安裝驅(qū)動方式就會出現(xiàn)版本不支持的錯誤,錯誤信息如下:


python3.4+版本安裝驅(qū)動報錯提示
1.3. 沒事,有我在!

如果是對于Python3.4+的版本,mysql官方提供的驅(qū)動已經(jīng)不滿足我們的需要,此時需要安裝一個第三方的驅(qū)動來完成和數(shù)據(jù)庫的連接支持

這個神奇的第三方數(shù)據(jù)庫就是:PyMySQL

接下來,安裝它:

python3 -m pip install pymysql

安裝過程如下圖所示:


安裝pymysql模塊


安裝完成后,可以通過import引入到我們的python程序中哦

注意:python2和python3連操作數(shù)據(jù)庫的方式稍有差異,python2.x操作數(shù)據(jù)庫主要使用的是mysqldb模塊;python3.x操作數(shù)據(jù)庫我們選擇使用pymysql。當(dāng)然,操作方式是一樣的,并沒有什么太大區(qū)別

2. python連接mysql數(shù)據(jù)庫

我們在前面的內(nèi)容中,已經(jīng)安裝好了數(shù)據(jù)庫連接驅(qū)動,接下來,通過python程序來連接數(shù)據(jù)庫
廢話不多,上干貨:

# 引入我們需要的操作數(shù)據(jù)庫模塊
import pymysql

# 連接數(shù)據(jù)庫
conn = pymysql.connect(
    host="localhost",   # 數(shù)據(jù)庫主機(jī)IP地址
    user="root",        # 數(shù)據(jù)庫登錄賬號
    password="",        # 數(shù)據(jù)庫登錄密碼
    database="pydb",    # 要連接的數(shù)據(jù)庫
    port=3306,          # 連接數(shù)據(jù)庫的端口號
    charset="utf-8"     # 使用指定編碼連接數(shù)據(jù)庫
)

請記住上面的代碼,連接數(shù)據(jù)庫就是這么簡單!
有人說~我記不住怎么辦,記不住那么多信息,可以記住pymysql.connect(),這樣總是可以的吧,然后進(jìn)入pymysql提供的connections.py源代碼中就可以看到connect()方法,它是這么寫的

def __init__(self, host=None, user=None, password="",
                 database=None, port=0, unix_socket=None,
                 charset='', sql_mode=None,
                 read_default_file=None, conv=None, use_unicode=None,
                 client_flag=0, cursorclass=Cursor, init_command=None,
                 connect_timeout=10, ssl=None, read_default_group=None,
                 compress=None, named_pipe=None, no_delay=None,
                 autocommit=False, db=None, passwd=None, local_infile=False,
                 max_allowed_packet=16*1024*1024, defer_connect=False,
                 auth_plugin_map={}, read_timeout=None, write_timeout=None,
                 bind_address=None):

上述pymysql的connections.py中上面的代碼的意思比較簡單,每一個參數(shù)都通過參數(shù)名稱我們基本就能明白參數(shù)是什么意義了。常用的也就那么幾個。

3. python操作數(shù)據(jù)庫中的數(shù)據(jù)

首先,我們打開mysql數(shù)據(jù)庫編輯工具(這里我使用的是sqlyog操作mysql,大家可以隨意),創(chuàng)建用戶表(我們將數(shù)據(jù)庫表創(chuàng)建的稍微正式點):

# 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE pydb;

# 指定使用數(shù)據(jù)庫
USE pydb;

# 創(chuàng)建用戶表
CREATE TABLE users(
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL COMMENT '用戶賬號',
    userpass VARCHAR(50) NOT NULL COMMENT '登錄密碼',
    nickname VARCHAR(50) COMMENT '昵稱',
    age INT COMMENT '年齡',
    gender VARCHAR(5) COMMENT '性別',
    phone VARCHAR(15) COMMENT '聯(lián)系方式',
    email VARCHAR(50) COMMENT '郵箱',
    createTime DATETIME COMMENT '賬號創(chuàng)建時間',
    updateTime DATETIME COMMENT '賬號最后修改時間',
    lastLogin DATETIME COMMENT '賬號最后登錄時間',
    usersFlag INT COMMENT '賬號狀態(tài):0 正常 1 鎖定 2 刪除',
    remark TEXT COMMENT '備注'
) DEFAULT CHARSET "utf8";

# 增加測試數(shù)據(jù)
INSERT INTO users(username, userpass, nickname, age, gender, phone, email, createTime, updateTime, lastLogin, usersFlag, remark)
VALUES("tom", "123", "凱特", 48, "男", "13868686868", "cat@163.com", "2017-06-01","2017-06-02","2017-06-05",0,"tom and jerry 管理員"),
("jerry", "111", "杰瑞", 46, "女", "15688888888", "mouse@163.com", "2017-06-01","2017-06-03","2017-06-04",0,"tom and jerry 管理員");
3.1. 操作數(shù)據(jù)庫數(shù)據(jù)的步驟
  • 連接數(shù)據(jù)庫
  • 獲取一個訪問數(shù)據(jù)庫的操作對象
  • 定義SQL語句
  • 執(zhí)行SQL語句
  • 處理結(jié)果
  • 關(guān)閉和數(shù)據(jù)庫之間的連接

    我們使用python操作數(shù)據(jù)庫,打開和數(shù)據(jù)庫的連接并維持連接是需要消耗系統(tǒng)資源滴,切記操作完成之后一定要關(guān)閉和數(shù)據(jù)庫之間的連接

3.2. 查詢數(shù)據(jù)庫中的數(shù)據(jù)

核心API:
executer(sql):執(zhí)行指定的sql語句,返回影響的行數(shù)
fetchall():獲取SQL操作的所有數(shù)據(jù)
fetchone():獲取SQL操作的第一條數(shù)據(jù)

接下來,上干貨:

# 引入我們需要的操作數(shù)據(jù)庫模塊
import pymysql

# 數(shù)據(jù)庫連接信息
HOST = "localhost"
USER = "root"
PASSWORD = ""
DATABASE = "pydb"
PORT = 3306
CHARSET = "utf8"

# 使用異常包含處理過程,方便在finally中關(guān)閉和數(shù)據(jù)庫的連接
try:
    # 連接數(shù)據(jù)庫
    conn = pymysql.connect(
        host=HOST,   # 數(shù)據(jù)庫主機(jī)IP地址
        user=USER,        # 數(shù)據(jù)庫登錄賬號
        password=PASSWORD,        # 數(shù)據(jù)庫登錄密碼
        database=DATABASE,    # 要連接的數(shù)據(jù)庫
        port=PORT,          # 連接數(shù)據(jù)庫的端口號
        charset=CHARSET     # 使用指定編碼連接數(shù)據(jù)庫
    )

    # 獲取執(zhí)行對象
    cursor = conn.cursor();

    # 定義查詢sql語句
    sql = "select * from users"

    # 執(zhí)行sql語句
    rows = cursor.execute(sql)

    # 獲取查詢結(jié)果
    result = cursor.fetchall()

    # 遍歷查詢結(jié)果
    for user in result:
        print("userid<%d>username<%s>userpass<%s>nickname<%s>createTime<%s>"
              % (user[0], user[1], user[2], user[3], user[8]))

except Exception as e:
    print("執(zhí)行過程出現(xiàn)異常<%s>" % str(e))
finally:
    # 不論是否出現(xiàn)異常,執(zhí)行完成后,保證數(shù)據(jù)庫連接關(guān)閉
    cursor.close()
    conn.close()

執(zhí)行上述代碼,返回如下預(yù)期的結(jié)果

userid<1>usernameuserpass<123>nickname<凱特>createTime<2017-06-01 00:00:00>
userid<2>username
userpass<111>nickname<杰瑞>createTime<2017-06-01 00:00:00>

下面是我們操作的過程中,明確操作結(jié)果就是一條數(shù)據(jù)的情況下

import pymysql

# 數(shù)據(jù)庫連接信息
HOST = "localhost"
USER = "root"
PASSWORD = ""
DATABASE = "pydb"
PORT = 3306
CHARSET = "utf8"

# 使用異常包含處理過程,方便在finally中關(guān)閉和數(shù)據(jù)庫的連接
try:
    # 連接數(shù)據(jù)庫
    conn = pymysql.connect(
        host=HOST,   # 數(shù)據(jù)庫主機(jī)IP地址
        user=USER,        # 數(shù)據(jù)庫登錄賬號
        password=PASSWORD,        # 數(shù)據(jù)庫登錄密碼
        database=DATABASE,    # 要連接的數(shù)據(jù)庫
        port=PORT,          # 連接數(shù)據(jù)庫的端口號
        charset=CHARSET     # 使用指定編碼連接數(shù)據(jù)庫
    )

    # 獲取執(zhí)行對象
    cursor = conn.cursor()

    # 定義sql語句
    sql = "select * from users"

    # 執(zhí)行sql語句
    rows = cursor.execute(sql)

    # 抓取查詢結(jié)果:獲取結(jié)果中的第一條數(shù)據(jù)
    result = cursor.fetchone()

    print("result:%s--%s--%s--%s" % (result[0], result[1], result[2], result[3]))
except Exception as e:
    print("出現(xiàn)異常<%s>" % str(e))
finally:
    # 關(guān)閉數(shù)據(jù)庫連接
    cursor.close()
    conn.close()

執(zhí)行上述代碼,可以看到數(shù)據(jù)也是正常獲取的

result:1--tom--123--凱特

3.3. 新增/更新/刪除數(shù)據(jù)到數(shù)據(jù)庫

廢話不說,直接上代碼,一定要看注釋啊

# 引入數(shù)據(jù)庫模塊
import pymysql

# 定義數(shù)據(jù)庫連接信息
HOST = "localhost"
USER = "root"
PASSWORD = ""
DATABASE = "pydb"
PORT = 3306
CHARSET = "utf8"

try:
    # 連接數(shù)據(jù)庫
    conn = pymysql.connect(
        host=HOST,
        user=USER,
        password=PASSWORD,
        database=DATABASE,
        port=PORT,
        charset=CHARSET
    )

    # 獲取執(zhí)行對象
    cursor = conn.cursor()

    """
    增加數(shù)據(jù)到數(shù)據(jù)庫的操作:insert
    """
    # 定義sql語句
    insertSql = 'INSERT INTO users(username, userpass, nickname, age, gender, phone, email, createTime, updateTime, lastLogin, usersFlag, remark)\
            VALUES("shuke", "123", "舒克", 42, "男", "15686868686", "shuke@163.com", "2017-06-01","2017-06-02","2017-06-05",0,"shuke and beita")'

    # 執(zhí)行sql語句
    rows = cursor.execute(insertSql)
    # 將更改的數(shù)據(jù)提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)被添加到數(shù)據(jù)庫中了" % rows)

    """
    更新數(shù)據(jù)到數(shù)據(jù)庫的操作:update
    """
    # 定義sql語句
    updateSql = 'update users set nickname = "凱特大叔" where id = 1'

    # 執(zhí)行sql語句
    rows = cursor.execute(updateSql)
    # 將更改的數(shù)據(jù)提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)在數(shù)據(jù)庫中被修改了" % rows)

    """
    從數(shù)據(jù)庫中刪除數(shù)據(jù):delete
    """
    # 定義sql語句
    deleteSql = 'delete from users where id = 2'

    # 執(zhí)行sql語句
    rows = cursor.execute(deleteSql)
    # 將刪除數(shù)據(jù)進(jìn)行提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)在數(shù)據(jù)庫中被刪除了" % rows)

except Exception as e:
    print("出現(xiàn)異常<%s>" % str(e))
finally:
    cursor.close()
    conn.close()

上述代碼,包含了基本的insert/update/delete三種類型的操作,分別操作了不同的數(shù)據(jù)

操作數(shù)據(jù)之間數(shù)據(jù)庫中的數(shù)據(jù)


python數(shù)據(jù)庫基本操作


上述程序運(yùn)行結(jié)束之后數(shù)據(jù)庫中的數(shù)據(jù),仔細(xì)觀察


python數(shù)據(jù)庫基本操作
3.4. 使用占位符進(jìn)行數(shù)據(jù)操作【需要掌握】

在SQL操作的過程中,如果我們通過將SQL字符串和對應(yīng)的數(shù)據(jù)通過拼接來操作的話,會變得非常的麻煩,大家可以試試上面的程序中的數(shù)據(jù),如果都是用戶輸入的,然后增加到SQL語句中,會是什么樣的場景

所以有了占位符的方式,來簡化數(shù)據(jù)和SQL語句之間的操作,廢話不多,代碼大家一看就懂,上干貨:

# 引入數(shù)據(jù)庫模塊
import pymysql

# 定義數(shù)據(jù)庫連接信息
HOST = "localhost"
USER = "root"
PASSWORD = ""
DATABASE = "pydb"
PORT = 3306
CHARSET = "utf8"

try:
    # 連接數(shù)據(jù)庫
    conn = pymysql.connect(
        host=HOST,
        user=USER,
        password=PASSWORD,
        database=DATABASE,
        port=PORT,
        charset=CHARSET
    )

    # 獲取執(zhí)行對象
    cursor = conn.cursor()

    """
    增加數(shù)據(jù)到數(shù)據(jù)庫的操作:insert
    """
    # 定義sql語句
    insertSql = 'INSERT INTO users(username, userpass, nickname, age, gender, phone, email, createTime, updateTime, lastLogin, usersFlag, remark)\
            VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'

    # 執(zhí)行sql語句
    rows = cursor.execute(insertSql, ("shuke", "123", "舒克", 42, "男", "15686868686", "shuke@163.com", "2017-06-01","2017-06-02","2017-06-05",0,"shuke and beita"))
    # 將更改的數(shù)據(jù)提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)被添加到數(shù)據(jù)庫中了" % rows)

    """
    更新數(shù)據(jù)到數(shù)據(jù)庫的操作:update
    """
    # 定義sql語句
    updateSql = 'update users set nickname = %s where id = %s'

    # 執(zhí)行sql語句
    rows = cursor.execute(updateSql, ["凱特大叔", 1])
    # 將更改的數(shù)據(jù)提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)在數(shù)據(jù)庫中被修改了" % rows)

    """
    從數(shù)據(jù)庫中刪除數(shù)據(jù):delete
    """
    # 定義sql語句
    deleteSql = 'delete from users where id = %s'

    # 執(zhí)行sql語句
    rows = cursor.execute(deleteSql, 1)
    # 將刪除數(shù)據(jù)進(jìn)行提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)在數(shù)據(jù)庫中被刪除了" % rows)

except Exception as e:
    print("出現(xiàn)異常<%s>" % str(e))
finally:
    cursor.close()
    conn.close()

上述代碼的執(zhí)行操作,和前面的基本操作是一致的,大家可以試試。

3.5. 批量操作及性能優(yōu)化建議

在python中,為了方便進(jìn)行批量數(shù)據(jù)的處理【批量數(shù)據(jù)增加、修改、刪除等操作】提供了一個executemany()函數(shù),操作方式和占位符的方式有點類似

直接上干貨

# 引入數(shù)據(jù)庫模塊
import pymysql

# 定義數(shù)據(jù)庫連接信息
HOST = "localhost"
USER = "root"
PASSWORD = ""
DATABASE = "pydb"
PORT = 3306
CHARSET = "utf8"

try:
    # 連接數(shù)據(jù)庫
    conn = pymysql.connect(
        host=HOST,
        user=USER,
        password=PASSWORD,
        database=DATABASE,
        port=PORT,
        charset=CHARSET
    )

    # 獲取執(zhí)行對象
    cursor = conn.cursor()

    """
    增加數(shù)據(jù)到數(shù)據(jù)庫的操作:使用占位符進(jìn)行批量操作
    """
    # 定義sql語句
    insertSql = 'INSERT INTO users(username, userpass, nickname, age) VALUES(%s, %s, %s, %s)'
    args = [("member1", "123", "會員1", 12),
            ("member2", "123", "會員2", 34),
            ("member3", "123", "會員3", 23),
            ("member4", "123", "會員4", 42)]

    # 執(zhí)行sql語句
    rows = cursor.executemany(insertSql, args)
    # 將更改的數(shù)據(jù)提交更新
    conn.commit()
    print("共有%d條數(shù)據(jù)被添加到數(shù)據(jù)庫中了" % rows)

except Exception as e:
    print("出現(xiàn)異常<%s>" % str(e))
finally:
    cursor.close()
    conn.close()

上述代碼中,我們可以看到,sql語句只是定義了一條語句,但是在后面的參數(shù)卻是一個列表,列表中包含了多條數(shù)據(jù)值,執(zhí)行的時候多條數(shù)據(jù)值會一起插入到數(shù)據(jù)庫中

打開sqlyog,執(zhí)行情況數(shù)據(jù)表users 的操作

truncate table users; # 清空users表中的數(shù)據(jù)

執(zhí)行上述程序,數(shù)據(jù)庫中就出現(xiàn)對應(yīng)的數(shù)據(jù)


pymysql批量執(zhí)行增加數(shù)據(jù)操作

但是,我們要說的是但是
executemany(sql, args)函數(shù)只是適合執(zhí)行多條數(shù)據(jù),但是不要去執(zhí)行大量數(shù)據(jù)(如執(zhí)行幾千幾萬條數(shù)據(jù))
這是為什么呢?
因為常規(guī)項目中,會有批量刪除、修改等操作,但是常規(guī)項目中的批量只是幾十條數(shù)據(jù),為了簡化操作python提供了executemany()函數(shù)來實現(xiàn)了這樣的功能
但是大量數(shù)據(jù)操作,使用executemany()反倒會影響執(zhí)行效率,讓數(shù)據(jù)庫操作變得緩慢,此時建議根據(jù)不同的數(shù)據(jù)庫使用多條sql語句拼接的方式來實現(xiàn)。


>>>更多VR/AR入門教程:VR入門
国产高清网站_亚洲一区二区综合_成人久久18免费网站_国产成人久久精品激情

    <sup id="ys8cw"><kbd id="ys8cw"></kbd></sup>

    <sup id="ys8cw"><font id="ys8cw"><output id="ys8cw"></output></font></sup>

    欧美另类一区二区三区| 亚洲精品水蜜桃| 一区二区激情小说| 国产精品自在在线| 欧美在线你懂的| 国产精品女主播av| 日本亚洲欧美天堂免费| 色94色欧美sute亚洲线路一ni| 欧美精品一区二区高清在线观看| 亚洲精品欧美激情| 不卡免费追剧大全电视剧网站| 欧美videos中文字幕| 午夜精品久久久久久久蜜桃app| 成人黄色电影在线| 26uuu精品一区二区在线观看| 亚洲成人黄色影院| 99久久精品久久久久久清纯| 精品国产乱码久久久久久牛牛 | 欧美mv日韩mv国产网站app| 亚洲卡通动漫在线| 一本大道综合伊人精品热热| 欧美国产精品中文字幕| 国产综合久久久久久久久久久久| 7777精品伊人久久久大香线蕉| 一二三四区精品视频| 97成人超碰视| 亚洲欧美综合色| 不卡一卡二卡三乱码免费网站| 久久久久久免费毛片精品| 美女免费视频一区二区| 91精品国产综合久久久蜜臀图片| 亚洲国产日日夜夜| 欧美三级欧美一级| 亚洲成人自拍偷拍| 欧美日韩和欧美的一区二区| 亚洲一区二区高清| 欧美揉bbbbb揉bbbbb| 亚洲一级二级在线| 欧美亚洲综合色| 亚洲第一精品在线| 欧美久久久久久久久| 亚洲va在线va天堂| 欧美人xxxx| 美女一区二区三区| 久久综合网色—综合色88| 久久激情五月婷婷| 久久只精品国产| 成人性生交大合| 18欧美亚洲精品| 欧美性生活久久| 日韩精品色哟哟| 欧美r级电影在线观看| 国产乱妇无码大片在线观看| 国产精品天美传媒| 91视视频在线观看入口直接观看www | 欧美日韩国产首页在线观看| 日本亚洲欧美天堂免费| 精品粉嫩超白一线天av| 国产69精品久久久久毛片| 亚洲乱码国产乱码精品精98午夜| 欧美最猛性xxxxx直播| 蜜臀av性久久久久蜜臀aⅴ| 国产午夜精品美女毛片视频| 99久久久久久| 日韩电影在线免费观看| 亚洲国产精品激情在线观看| 欧美在线免费视屏| 久久激情综合网| 亚洲欧美日韩国产成人精品影院| 欧美日韩亚洲综合一区二区三区| 久久精品国产一区二区| 中文字幕在线观看一区二区| 欧美一区二区日韩| av在线不卡免费看| 日韩国产精品久久久| 国产无一区二区| 欧美日韩国产综合久久| 国产成人高清在线| 日韩电影在线观看一区| 国产精品久久久久久久久免费桃花| 欧美精品色综合| 成人app网站| 麻豆精品视频在线观看| 亚洲欧美欧美一区二区三区| 日韩一卡二卡三卡国产欧美| av福利精品导航| 日韩国产精品91| 亚洲特黄一级片| 欧美影视一区二区三区| 免费的国产精品| 亚洲天堂2014| 欧美成人精品3d动漫h| 99热99精品| 石原莉奈在线亚洲三区| 欧美激情在线观看视频免费| 欧美无乱码久久久免费午夜一区 | 欧美片网站yy| 高清不卡在线观看av| 午夜婷婷国产麻豆精品| 国产精品久久久久永久免费观看 | 欧美日韩一级片网站| 美腿丝袜亚洲色图| 欧美激情一区二区三区| 91精品国产色综合久久不卡蜜臀| 蜜臀a∨国产成人精品| 国产精品卡一卡二| 欧美性受xxxx黑人xyx| 激情小说亚洲一区| 日韩高清国产一区在线| 自拍偷拍亚洲激情| 久久久久久久久久电影| 91精品国产一区二区| 91麻豆高清视频| 亚洲欧美区自拍先锋| 久久精品人人做人人综合| 色狠狠色噜噜噜综合网| 狠狠久久亚洲欧美| 一区二区三区影院| 精品美女一区二区| 在线观看日韩电影| 成人美女视频在线观看| 国产精一品亚洲二区在线视频| 奇米影视在线99精品| 亚洲欧洲日韩av| 国产精品热久久久久夜色精品三区| 久久亚洲私人国产精品va媚药| 欧美一区二区视频免费观看| 欧美性猛片aaaaaaa做受| 91免费观看国产| 99麻豆久久久国产精品免费| 亚洲综合精品自拍| 亚洲自拍另类综合| 欧美国产成人精品| 欧美一区二区私人影院日本| 欧美日韩一区二区三区四区| 欧美在线观看一区| 91福利精品第一导航| 在线观看一区二区视频| 色呦呦网站一区| 色婷婷精品久久二区二区蜜臂av| 成人av高清在线| 不卡电影一区二区三区| 99久久er热在这里只有精品15| av电影一区二区| 久久精品久久综合| 日本欧美一区二区在线观看| 首页亚洲欧美制服丝腿| 蜜臀精品一区二区三区在线观看 | 成人激情午夜影院| 风间由美一区二区三区在线观看| 国产馆精品极品| 国产成人av一区二区三区在线| 极品少妇一区二区| 精品在线你懂的| 青青国产91久久久久久| 久久99久久99小草精品免视看| 久久er99热精品一区二区| 国产美女在线精品| 91在线一区二区三区| 欧美精品18+| 26uuu亚洲综合色| 亚洲人成网站在线| 天天亚洲美女在线视频| 国产乱码精品一区二区三区忘忧草| 韩国精品免费视频| 91麻豆高清视频| 日韩欧美黄色影院| 亚洲欧洲无码一区二区三区| 日日夜夜免费精品| 国产91清纯白嫩初高中在线观看 | 国产一区二区三区日韩| 色哟哟亚洲精品| 欧美一区二区大片| 综合亚洲深深色噜噜狠狠网站| 午夜精品久久久久久久久久久| 国产黄色91视频| 欧美高清视频在线高清观看mv色露露十八| 久久久久久久性| 天堂成人免费av电影一区| 成人h动漫精品一区二区| 91麻豆精品国产91久久久久久| 中文字幕中文字幕中文字幕亚洲无线| 午夜精品免费在线| 99国产一区二区三精品乱码| 日韩美女在线视频| 香蕉久久一区二区不卡无毒影院| 99久久精品免费| 国产清纯在线一区二区www| 日韩有码一区二区三区| 一本色道综合亚洲| 国产亚洲精品免费| 免费成人结看片| 欧美日韩国产片| 亚洲欧美偷拍卡通变态| 顶级嫩模精品视频在线看| 日韩视频一区二区在线观看| 一区二区三区 在线观看视频| av日韩在线网站| 国产精品美女久久久久aⅴ | 国产一区二区在线看|