精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang牽手PostgreSQL"增刪改查+不寫結(jié)構(gòu)快速掃描字段"快速入門

數(shù)據(jù)庫 其他數(shù)據(jù)庫 PostgreSQL
本文主要使用的github.com/lib/pq包, 它是一款為Go語言database/sql包(sql包是go定義的一套圍繞SQL或類似SQL數(shù)據(jù)庫的通用接口, 需要結(jié)合具體數(shù)據(jù)庫的驅(qū)動(dòng)一起使用)定制, 純Go開發(fā)的PostgreSQL驅(qū)動(dòng).

 PostgreSQL(也稱postgres)是一款強(qiáng)大的開源對(duì)象關(guān)系數(shù)據(jù)庫系統(tǒng)(ORDBMS), 歷經(jīng)30年以上的打磨, 具有高可靠性, 強(qiáng)健壯性, 高性能等優(yōu)點(diǎn). 詳見官網(wǎng).

本文主要使用的github.com/lib/pq包, 它是一款為Go語言database/sql包(sql包是go定義的一套圍繞SQL或類似SQL數(shù)據(jù)庫的通用接口, 需要結(jié)合具體數(shù)據(jù)庫的驅(qū)動(dòng)一起使用)定制, 純Go開發(fā)的PostgreSQL驅(qū)動(dòng).

什么是不寫結(jié)構(gòu)體?

本文中可以理解為, 查詢數(shù)據(jù)庫配置直接返回鍵值對(duì)類型, 或者查詢數(shù)據(jù)返回多行數(shù)據(jù), 不需要針對(duì)列值聲明字段, 分別采用Map和Map數(shù)組來接收單行, 和多行數(shù)據(jù). 詳細(xì)原理請(qǐng)參考之前的博文:Golang連接MySQL執(zhí)行查詢并解析-告別結(jié)構(gòu)體

接下來, 咱們一起來實(shí)現(xiàn)PostgreSQL Golang版本的增刪改查(CRUD)與單行,多行字段快速掃描解析吧!

驅(qū)動(dòng)安裝

執(zhí)行以下命令安裝postgresql驅(qū)動(dòng)

  1. go get github.com/lib/pq 

pq包支持的功能

  • SSL
  • 作為驅(qū)動(dòng)程序, 與database/sql結(jié)合處理連接相關(guān)操作
  • 掃描時(shí)間time.Time類型, 如 timestamp[tz], time[tz], date
  • 掃描二進(jìn)制blobs對(duì)象(Blob是內(nèi)存中的數(shù)據(jù)緩沖, 用來匹配strign類型的ID和字節(jié)切片), 如: bytea
  • PostgreSQL的hstore數(shù)據(jù)類型支持
  • 支持COPY FROM
  • pq.ParseURL方法用來將urls轉(zhuǎn)化為sql.Open的連接字符串
  • 支持許多l(xiāng)ibpq庫兼容的環(huán)境變量
  • 支持Unix socket
  • 支持通知Notifications, 如:LISTEN/NOTIFY
  • 支持pgpass
  • GSS (Kerberos) 認(rèn)證

連接字符串參數(shù)

pq包與libpq類似(libpq是用C編寫的底層接口, 為其他高級(jí)語言比如C++,Perl,Python,Tcl和ECPG等提供底層PostgreSQL支持). 建立連接時(shí)需要提供連接參數(shù), 一部分支持libpq的參數(shù)也支持pq, 額外的, pq允許在連接字符串中指定運(yùn)行時(shí)參數(shù)(如:search_path或work_mem), libpq則不能在連接字符串中指定運(yùn)行時(shí)參數(shù), 只能在option參數(shù)中指定.

pq包為了兼容libpq包, 下面的連接參數(shù)都支持

  1. * dbname - 需要連接的數(shù)據(jù)庫名 
  2. user - 需要使用的用戶名 
  3. password - 該用戶的密碼 
  4. * host - 需要連接的postgresql主機(jī), unix域名套接字以/開始, 默認(rèn)是localhost 
  5. * port - postgresql綁定的端口 (默認(rèn)5432) 
  6. * sslmode - 是否使用SSL (默認(rèn)是啟用(require), libpq包默認(rèn)不啟用SSL) 
  7. * fallback_application_name - 失敗時(shí),可以提供一個(gè)應(yīng)用程序名來跟蹤. 
  8. * connect_timeout - 連接最大等待秒數(shù), 0或者不指定, 表示不確定時(shí)間的等待 
  9. * sslcert - 證書文件位置, 文件中必須包含PEM編碼的數(shù)據(jù) 
  10. * sslkey - 密鑰文件位置, 文件中必須包含PEM編碼的數(shù)據(jù) 
  11. * sslrootcert - 根證書文件位置, 文件中必須包含PEM編碼的數(shù)據(jù) 

sslmode 支持一下模式

  1. * disable - 禁用SSL 
  2. * require - 總是使用SSL(跳過驗(yàn)證) 
  3. * verify-ca - 總是使用SSL (驗(yàn)證服務(wù)器提供的證書是由可信的CA簽署的) 
  4. * verify-full - 總是使用SSL(驗(yàn)證服務(wù)器提供的證書是由受信任的CA簽署的,并驗(yàn)證服務(wù)器主機(jī)名是否與證書中的主機(jī)名匹配) 

更多連接字符串參數(shù)請(qǐng)參考官方文檔

對(duì)包含空格的參數(shù), 需要使用單引號(hào), 如:

  1. "user=pqgotest password='with spaces'" 

使用反斜杠進(jìn)行轉(zhuǎn)義, 如:

  1. "user=space\ man password='it\'s valid'" 

注意: 如果要設(shè)置client_encoding連接參數(shù)(用于設(shè)置連接的編碼), 必須設(shè)置為"UTF8", 才能與Postgres匹配, 設(shè)置為其他值將會(huì)報(bào)錯(cuò).

除了上面的參數(shù), 在連接字符串中也可以通過后臺(tái)設(shè)置運(yùn)行時(shí)參數(shù), 詳細(xì)運(yùn)行時(shí)參數(shù), 請(qǐng)參考runtime-config

支持libpq的大部分環(huán)境變量也支持pq包, 詳細(xì)環(huán)境變量請(qǐng)參考libpq-envars. 如果沒有設(shè)置環(huán)境變量且連接字符串也沒有提供該參數(shù), 程序會(huì)panic崩潰退出, 字符串參數(shù)優(yōu)先級(jí)高于環(huán)境變量.

完整"增刪改查"示例代碼

  1. package main 
  2.  
  3. import ( 
  4.   "database/sql" 
  5.   "encoding/json" 
  6.   "fmt" 
  7.   _ "github.com/lib/pq" 
  8.   "log" 
  9.  
  10. const ( 
  11.  
  12.   // Initialize connection constants. 
  13.   HOST     = "172.16.xx.xx" 
  14.   PORT     = 31976 
  15.   DATABASE = "postgres" 
  16.   USER     = "postgres" 
  17.   PASSWORD = "xxx" 
  18.  
  19. func checkError(err error) { 
  20.   if err != nil { 
  21.     panic(err) 
  22.   } 
  23.  
  24. type Db struct { 
  25.   db *sql.DB 
  26.  
  27. // 創(chuàng)建表 
  28. func (this *Db) CreateTable() { 
  29.   // 以水果庫存清單表inventory為例 
  30.   // Drop previous table of same name if one exists.  如果之前存在清單表, 則刪除該表 
  31.   _, err := this.db.Exec("DROP TABLE IF EXISTS inventory;"
  32.   checkError(err) 
  33.   fmt.Println("Finished dropping table (if existed)"
  34.  
  35.   // Create table. 創(chuàng)建表, 指定id, name, quantity(數(shù)量)字段, 其中id為主鍵 
  36.   _, err = this.db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);"
  37.   checkError(err) 
  38.   fmt.Println("Finished creating table"
  39.  
  40. // 刪除表 
  41. func (this *Db) DropTable() { 
  42.   // 以水果庫存清單表inventory為例 
  43.   // Drop previous table of same name if one exists.  如果之前存在清單表, 則刪除該表 
  44.   _, err := this.db.Exec("DROP TABLE IF EXISTS inventory;"
  45.   checkError(err) 
  46.   fmt.Println("Finished dropping table (if existed)"
  47.  
  48. // 增加數(shù)據(jù) 
  49. func (this *Db) Insert() { 
  50.   // Insert some data into table. 插入3條水果數(shù)據(jù) 
  51.   sql_statement := "INSERT INTO inventory (name, quantity) VALUES ($1, $2);" 
  52.   _, err := this.db.Exec(sql_statement, "banana", 150) 
  53.   checkError(err) 
  54.   _, err = this.db.Exec(sql_statement, "orange", 154) 
  55.   checkError(err) 
  56.   _, err = this.db.Exec(sql_statement, "apple", 100) 
  57.   checkError(err) 
  58.   fmt.Println("Inserted 3 rows of data"
  59.  
  60. // 讀數(shù)據(jù)/查數(shù)據(jù) 
  61. func (this *Db) Read() { 
  62.   //讀取數(shù)據(jù) 
  63.   // Read rows from table
  64.   var id int 
  65.   var name string 
  66.   var quantity int 
  67.  
  68.   sql_statement := "SELECT * from inventory;" 
  69.   rows, err := this.db.Query(sql_statement) 
  70.   checkError(err) 
  71.   defer rows.Close() 
  72.  
  73.   for rows.Next() { 
  74.     switch err := rows.Scan(&id, &name, &quantity); err { 
  75.     case sql.ErrNoRows: 
  76.       fmt.Println("No rows were returned"
  77.     case nil: 
  78.       fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity) 
  79.     default
  80.       checkError(err) 
  81.     } 
  82.   } 
  83.  
  84.  
  85. // 更新數(shù)據(jù) 
  86. func (this *Db) Update() { 
  87.   // Modify some data in table
  88.   sql_statement := "UPDATE inventory SET quantity = $2 WHERE name = $1;" 
  89.   _, err := this.db.Exec(sql_statement, "banana", 200) 
  90.   checkError(err) 
  91.   fmt.Println("Updated 1 row of data"
  92.  
  93. // 刪除數(shù)據(jù) 
  94. func (this *Db) Delete() { 
  95.   // Delete some data from table
  96.   sql_statement := "DELETE FROM inventory WHERE name = $1;" 
  97.   _, err := this.db.Exec(sql_statement, "orange"
  98.   checkError(err) 
  99.   fmt.Println("Deleted 1 row of data"
  100.  
  101. // 數(shù)據(jù)序列化為Json字符串, 便于人工查看 
  102. func Data2Json(anyData interface{}) string { 
  103.   JsonByte, err := json.Marshal(anyData) 
  104.   if err != nil { 
  105.     log.Printf("數(shù)據(jù)序列化為json出錯(cuò):\n%s\n", err.Error()) 
  106.     return "" 
  107.   } 
  108.   return string(JsonByte) 
  109.  
  110.  
  111. //多行數(shù)據(jù)解析 
  112. func QueryAndParseRows(Db *sql.DB, queryStr string) []map[string]string { 
  113.   rows, err := Db.Query(queryStr) 
  114.   defer rows.Close() 
  115.   if err != nil { 
  116.     log.Printf("查詢出錯(cuò):\nSQL:\n%s, 錯(cuò)誤詳情\n", queryStr, err.Error()) 
  117.     return nil 
  118.   } 
  119.   cols, _ := rows.Columns() //列名 
  120.   if len(cols) > 0 { 
  121.     var ret []map[string]string //定義返回的映射切片變量ret 
  122.     for rows.Next() { 
  123.       buff := make([]interface{}, len(cols)) 
  124.       data := make([][]byte, len(cols)) //數(shù)據(jù)庫中的NULL值可以掃描到字節(jié)中 
  125.       for i, _ := range buff { 
  126.         buff[i] = &data[i] 
  127.       } 
  128.       rows.Scan(buff...) //掃描到buff接口中,實(shí)際是字符串類型data中 
  129.  
  130.       //將每一行數(shù)據(jù)存放到數(shù)組中 
  131.       dataKv := make(map[string]string, len(cols)) 
  132.       for k, col := range data { //k是index,col是對(duì)應(yīng)的值 
  133.         //fmt.Printf("%30s:\t%s\n", cols[k], col) 
  134.         dataKv[cols[k]] = string(col) 
  135.       } 
  136.       ret = append(ret, dataKv) 
  137.     } 
  138.     log.Printf("返回多元素?cái)?shù)組:\n%s", Data2Json(ret)) 
  139.     return ret 
  140.   } else { 
  141.     return nil 
  142.   } 
  143.  
  144. //單行數(shù)據(jù)解析 查詢數(shù)據(jù)庫,解析查詢結(jié)果,支持動(dòng)態(tài)行數(shù)解析 
  145. func QueryAndParse(Db *sql.DB, queryStr string) map[string]string { 
  146.   rows, err := Db.Query(queryStr) 
  147.   defer rows.Close() 
  148.  
  149.   if err != nil { 
  150.     log.Printf("查詢出錯(cuò):\nSQL:\n%s, 錯(cuò)誤詳情\n", queryStr, err.Error()) 
  151.     return nil 
  152.   } 
  153.   //rows, _ := Db.Query("SHOW VARIABLES LIKE '%data%'"
  154.  
  155.   cols, _ := rows.Columns() 
  156.   if len(cols) > 0 { 
  157.     buff := make([]interface{}, len(cols)) // 臨時(shí)slice 
  158.     data := make([][]byte, len(cols))      // 存數(shù)據(jù)slice 
  159.     dataKv := make(map[string]string, len(cols)) 
  160.     for i, _ := range buff { 
  161.       buff[i] = &data[i] 
  162.     } 
  163.  
  164.     for rows.Next() { 
  165.       rows.Scan(buff...) // ...是必須的 
  166.     } 
  167.  
  168.     for k, col := range data { 
  169.       dataKv[cols[k]] = string(col) 
  170.       //fmt.Printf("%30s:\t%s\n", cols[k], col) 
  171.     } 
  172.     log.Printf("返回單行數(shù)據(jù)Map:\n%s", Data2Json(dataKv)) 
  173.     return dataKv 
  174.   } else { 
  175.     return nil 
  176.   } 
  177.  
  178.  
  179. func main() { 
  180.   // Initialize connection string. 初始化連接字符串, 參數(shù)包含主機(jī),端口,用戶名,密碼,數(shù)據(jù)庫名,SSL模式(禁用),超時(shí)時(shí)間 
  181.   var connectionString string = fmt.Sprintf("host=%s  port=%d user=%s password=%s dbname=%s sslmode=disable connect_timeout=3", HOST, PORT, USERPASSWORDDATABASE
  182.  
  183.   // Initialize connection object. 初始化連接對(duì)象, 驅(qū)動(dòng)名為postgres 
  184.   db, err := sql.Open("postgres", connectionString) 
  185.   defer db.Close() 
  186.   checkError(err) 
  187.   postgresDb := Db{ 
  188.     db: db, 
  189.   } 
  190.   err = postgresDb.db.Ping() //連通性檢查 
  191.   checkError(err) 
  192.   fmt.Println("Successfully created connection to database"
  193.  
  194.   postgresDb.CreateTable()         //創(chuàng)建表 
  195.   postgresDb.Insert()              //插入數(shù)據(jù) 
  196.   postgresDb.Read()                //查詢數(shù)據(jù) 
  197.   QueryAndParseRows(postgresDb.db, "SELECT * from inventory;") //直接查詢和解析多行數(shù)據(jù) 
  198.   QueryAndParse(postgresDb.db, "SHOW DateStyle;") //直接查詢和解析單行數(shù)據(jù) 
  199.   postgresDb.Update()              //修改/更新數(shù)據(jù) 
  200.   postgresDb.Read() 
  201.   postgresDb.Delete()              //刪除數(shù)據(jù) 
  202.   postgresDb.Read() 
  203.   postgresDb.DropTable() 

執(zhí)行 go run main.go運(yùn)行結(jié)果如下:

  1. Successfully created connection to database 
  2. Finished dropping table (if existed) 
  3. Finished creating table 
  4. Inserted 3 rows of data 
  5. Data row = (1, banana, 150) 
  6. Data row = (2, orange, 154) 
  7. Data row = (3, apple, 100) 
  8. 2020/12/15 22:13:33 返回多元素?cái)?shù)組: 
  9. [{"id":"1","name":"banana","quantity":"150"},{"id":"2","name":"orange","quantity":"154"},{"id":"3","name":"apple","quantity":"100"}] 
  10. 2020/12/15 22:13:33 返回單行數(shù)據(jù)Map: 
  11. {"DateStyle":"ISO, MDY"
  12. Updated 1 row of data 
  13. Data row = (2, orange, 154) 
  14. Data row = (3, apple, 100) 
  15. Data row = (1, banana, 200) 
  16. Deleted 1 row of data 
  17. Data row = (3, apple, 100) 
  18. Data row = (1, banana, 200) 
  19. Finished dropping table (if existed) 

總結(jié)

本文對(duì)pq驅(qū)動(dòng)包以及連接字符串參數(shù)進(jìn)行了介紹

示例代碼分別將連接/創(chuàng)建表格/增加行數(shù)據(jù)/更新行數(shù)據(jù)/刪除行數(shù)據(jù)封裝為不同的方法, 便于靈活使用

查詢單行或多行數(shù)據(jù)時(shí), 可以直接使用封裝好的方法, 直接傳入Db指針和查詢語句即可

參考文檔

https://docs.microsoft.com/en-us/azure/postgresql/connect-go

https://pkg.go.dev/github.com/lib/pq

https://www.postgresql.org/

https://www.postgresql.org/docs/current/libpq.html

 

責(zé)任編輯:姜華 來源: 云原生云
相關(guān)推薦

2012-04-19 10:06:16

ibmdw

2020-11-23 10:48:39

Golang GinW

2020-08-12 08:30:20

數(shù)據(jù)結(jié)構(gòu)算法

2015-10-29 15:36:19

Redis入門

2023-02-27 07:37:56

Curl操作SQL

2022-03-22 11:35:10

數(shù)據(jù)建模PostgreSQLCitus

2023-12-19 09:36:35

PostgreSQL數(shù)據(jù)庫開源

2024-11-18 00:22:34

2019-11-07 15:39:36

數(shù)據(jù)庫MySQL文章

2011-11-29 12:27:54

2009-09-24 15:27:41

Hibernate查詢

2010-06-24 13:35:53

GRE協(xié)議

2021-05-07 08:02:53

Sentinel 流量服務(wù)

2011-03-08 16:50:35

2021-10-20 09:04:21

Spring Beanscope數(shù)據(jù)庫

2023-06-08 08:13:43

2022-04-26 07:45:52

PostgreSQL容器

2011-05-16 09:22:28

SQL語言

2021-01-15 09:30:02

Tomcat ApacheJavaServer

2009-11-18 14:53:59

PHP Session
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

蜜臀久久99精品久久一区二区| 黄在线免费观看| 欧美综合二区| 中文字幕精品久久久久| 天天综合天天添夜夜添狠狠添| av电影高清在线观看| 成人免费毛片高清视频| 国产97在线|日韩| 国产一区第一页| 哺乳一区二区三区中文视频| 色狠狠av一区二区三区| 亚洲一区综合| 婷婷色在线观看| 免费av网站大全久久| 欧美激情免费观看| 国产精品www爽爽爽| 一区二区网站| 欧美视频一区在线观看| 日韩网站在线免费观看| av福利精品| av一区二区三区在线| 国产精品视频在线播放| 亚洲综合一二三| 欧美大人香蕉在线| 亚洲毛片在线看| 中文字幕第10页| 精品国产欧美日韩一区二区三区| 亚洲综合激情小说| 中文字幕一区日韩电影| 亚洲综合伊人久久| 成年美女黄网站色大片不卡| 亚洲精品成人天堂一二三| 欧美一区二区三区四区五区六区| 国产有码在线观看| 日韩精品乱码免费| 26uuu另类亚洲欧美日本一| 日韩在线一卡二卡| 欧洲乱码伦视频免费| 亚洲国内精品视频| 国产5g成人5g天天爽| 无人区在线高清完整免费版 一区二| 亚洲一区二三区| 性生活免费观看视频| 日韩免费网站| 国产欧美一区二区精品性色超碰| 韩国一区二区三区美女美女秀 | 成人在线视频免费播放| 99久久这里有精品| 欧美日韩另类国产亚洲欧美一级| 美女av免费在线观看| sm捆绑调教国产免费网站在线观看| 亚洲女人****多毛耸耸8| 91九色视频在线| 91在线视频免费播放| 亚洲尤物精选| 欧美亚洲另类激情另类| 国产www在线| 久久综合综合久久| 亚洲精品国产精品国产| 玉足女爽爽91| 亚洲乱码日产精品bd在线观看| 麻豆传媒免费在线观看| 国产精品美日韩| 亚洲精品成人自拍| 自拍视频在线免费观看| 国产精品剧情在线亚洲| 亚洲国产一区二区精品视频| 成年人视频在线观看免费| 欧美国产一区视频在线观看| 午夜欧美性电影| 日韩av中文| 亚洲日本丝袜连裤袜办公室| 99精品一级欧美片免费播放| 在线播放蜜桃麻豆| 夜夜嗨av一区二区三区中文字幕| 999一区二区三区| 91超碰免费在线| 第一福利永久视频精品| 成人观看免费完整观看| 播放一区二区| 欧美一级xxx| 天天躁日日躁狠狠躁av麻豆男男| 日韩欧美ww| 中文字幕日本欧美| 青青草激情视频| 国产视频一区在线观看一区免费| 国产激情久久久| 国产乱码一区二区| 国产成人8x视频一区二区| 精品免费国产| 在线观看美女网站大全免费| 亚洲欧美另类在线| 久草热视频在线观看| yy6080久久伦理一区二区| 日韩一级高清毛片| 国产精品探花一区二区在线观看| 欧美色图一区| 欧美黑人一区二区三区 | 岛国视频午夜一区免费在线观看| 亚洲一区二区蜜桃| 日韩视频在线直播| 亚洲图片欧美日产| 校园春色 亚洲| 久久国产精品毛片| 91视频免费进入| 好男人免费精品视频| 亚洲色图视频网| 国产麻花豆剧传媒精品mv在线| 北岛玲精品视频在线观看| 亚洲精品久久在线| 欧美色图亚洲视频| 久热精品在线| 国产精品麻豆免费版| 91在线视频免费看| 欧美日韩黄色大片| 亚洲av毛片在线观看| 欧美裸体在线版观看完整版| 欧美激情区在线播放| 中文字幕在线观看欧美| 99久久99久久精品免费看蜜桃| 中文字幕中文字幕99 | 国产精品自拍小视频| 视频三区在线观看| 亚洲一区二区av在线| 毛片毛片毛片毛| 国产精品午夜一区二区三区| 91国在线精品国内播放| 亚洲高清视频网站| 中文字幕亚洲在| 天堂中文视频在线| 亚洲另类av| 午夜欧美不卡精品aaaaa| 国产又粗又猛又黄又爽| 中文字幕免费一区| 黄色高清无遮挡| 高清精品xnxxcom| 欧美肥婆姓交大片| 国产精品久久久久精| 国产精品人人做人人爽人人添 | 色在线观看视频| 久久国产视频网| 视频二区一区| 一呦二呦三呦精品国产| 亚洲欧美日韩一区在线| 免费观看成人毛片| 91在线视频免费91| 国产96在线 | 亚洲| 豆花视频一区二区| 欧美国产日韩xxxxx| www.蜜臀av| 亚洲国产一区二区三区| 免费黄视频在线观看| 欧美一区91| 亚洲综合精品伊人久久| 中文字幕中文字幕在线中高清免费版 | 亚洲精品一区二区三区四区五区| 成人自拍av| 亚洲性生活视频| 中文字幕乱码中文字幕| 国产精品拍天天在线| 五月天av在线播放| 四虎成人精品永久免费av九九| 国产精品欧美激情| 尤物视频在线免费观看| 7777精品伊人久久久大香线蕉完整版 | 亚洲日本在线a| 天堂网成人在线| 欧美日韩三级| 精品福利影视| 黄瓜视频成人app免费| 中文字幕亚洲综合久久| 一道本无吗一区| 亚洲卡通动漫在线| 美女伦理水蜜桃4| 国产免费成人| 亚洲国产精品一区二区第一页| 日韩国产一二三区| 色中色综合影院手机版在线观看| 黑人乱码一区二区三区av| 欧美日韩国产影院| 五月婷婷婷婷婷| 国产suv精品一区二区883| 99视频在线免费播放| 精品国产乱码| 99在线热播| www.日韩| 欧美成人午夜激情| 五月激情丁香婷婷| 欧美亚洲免费在线一区| 九九视频免费看| 久久综合国产精品| 三级性生活视频| 中国女人久久久| 一区二区三区四区视频在线 | 精品久久久久久久久久久院品网| 国产91精品一区| 成人欧美一区二区三区1314 | 中文字幕影片免费在线观看| 久久免费国产| 小泽玛利亚av在线| 国产一区二区三区电影在线观看| 亚洲一区二区久久久久久| 三级在线观看视频| 久久精品人人做人人爽| 日韩av视屏| 日韩欧美亚洲国产精品字幕久久久| 中文字字幕在线中文| 亚洲乱码国产乱码精品精可以看 | 欧美激情一区三区| 美女搡bbb又爽又猛又黄www| 欧美aaaaaa午夜精品| 欧洲精品一区二区三区久久| 日韩在线二区| 免费在线国产精品| 大陆精大陆国产国语精品| 国产精品丝袜高跟| 欧美另类老肥妇| 欧美日韩成人精品| 欧美成人视屏| 亚洲人成电影在线| 五月婷婷综合久久| 欧美成人三级在线| 亚洲永久精品视频| 91久久精品国产91性色tv| 香蕉视频一区二区| 亚洲精品精品亚洲| 91香蕉视频污在线观看| www久久久久| 国产精品无码电影| 国产成人av电影在线观看| 成人性生交视频免费观看| 日本不卡免费在线视频| 欧美精品色婷婷五月综合| 亚洲欧洲一区二区天堂久久| 肉大捧一出免费观看网站在线播放| 久久中文字幕av| 亚洲ai欧洲av| 色男人天堂综合再现| 日本一区不卡| 精品国产一区二区三区久久久蜜臀 | 欧美猛交免费看| 久久精品视频观看| 日韩专区中文字幕| 男人在线资源站| 日韩最新中文字幕电影免费看| 国产一区二区三区福利| 亚洲欧美日韩另类| 嫩草研究院在线观看| 日韩高清不卡av| 香蕉视频黄在线观看| 日韩av在线影院| 天天操天天操天天| 日韩成人激情视频| 欧洲亚洲精品视频| 国产亚洲福利一区| av一本在线| 日韩小视频在线观看| 色视频在线免费观看| 日韩视频精品在线| aaa大片在线观看| 久久久久久中文字幕| 国产高清在线a视频大全| 久久人人看视频| aa国产成人| 国产精品88a∨| 福利一区二区免费视频| 91视频九色网站| 韩国精品福利一区二区三区| 九九九九精品九九九九| 真实原创一区二区影院| 亚洲精美视频| 欧美黄色一级视频| 黄色一级片播放| 日本伊人精品一区二区三区观看方式 | 波多一区二区| 国产91精品久久久久久久| 日本另类视频| 97免费高清电视剧观看| 任我爽精品视频在线播放| 亚洲美女搞黄| 午夜欧美精品久久久久久久| 国产精品沙发午睡系列| 蜜桃视频在线观看一区| 中文字幕亚洲日本| 久久影院电视剧免费观看| 美国黑人一级大黄| 一区二区在线观看视频在线观看| 日韩毛片在线播放| 在线观看欧美黄色| www香蕉视频| 亚洲午夜av久久乱码| 国产调教视频在线观看| 浅井舞香一区二区| 激情综合婷婷| 欧美日韩一区二区三区在线观看免 | av动漫免费观看| 亚洲区第一页| 天堂在线一区二区三区| 久久色在线观看| 私库av在线播放| 91久久精品一区二区二区| 亚洲av无码国产精品永久一区| 亚洲精品自产拍| 日本中文字幕中出在线| 国产精品27p| 91成人在线精品视频| 无码免费一区二区三区免费播放| 亚洲私人影院| www.久久久久久久久久久| 久久亚洲精品小早川怜子| 永久久久久久久| 在线看不卡av| 亚洲aaa在线观看| 九色精品美女在线| 欧美成人aaa| 欧美下载看逼逼| 亚洲日本激情| 搡的我好爽在线观看免费视频| 久久精品在线免费观看| 精品午夜福利视频| 欧美一区二区在线视频| www.中文字幕久久久| 91精品国产91久久久| 1204国产成人精品视频| 欧美性受xxxx黑人猛交88| 看电视剧不卡顿的网站| 免费在线观看你懂的| 亚洲成av人片在线观看无码| www.黄色一片| 久久综合五月天| 日韩欧乱色一区二区三区在线| 秋霞毛片久久久久久久久| 国产精品人人爽人人做我的可爱| 曰本三级日本三级日本三级| 亚洲视频一二三区| 一二三区中文字幕| 综合136福利视频在线| 91天天综合| 婷婷久久五月天| 日本不卡免费在线视频| 亚洲一区视频在线播放| 在线亚洲一区二区| 激情福利在线| 国产精品第8页| 狠狠做深爱婷婷综合一区| 黑森林福利视频导航| 久久亚洲精精品中文字幕早川悠里| 午夜影院在线看| 国产视频一区在线| 亚洲欧美小说色综合小说一区| 久久精品国产精品青草色艺| 国产亚洲永久域名| 毛片网站免费观看| 91福利区一区二区三区| 成人在线观看网站| 国产精品网站视频| 91精品啪在线观看国产81旧版| 亚洲三级在线观看视频| 亚洲黄色录像片| 日韩一级片免费在线观看| 69视频在线播放| 你懂的一区二区三区| 激情综合网婷婷| 国产精品视频线看| 国产在成人精品线拍偷自揄拍| 欧美www在线| 韩国精品福利一区二区三区| 美女av免费在线观看| 国产精品无遮挡| 99精品国产99久久久久久97| 欧美日韩成人免费| 亚洲另类av| 五月激情五月婷婷| 国产伦精一区二区三区| 欧美日韩亚洲国产另类| 亚洲国产日韩欧美在线动漫| 成人欧美magnet| 一本色道久久99精品综合| 国产丶欧美丶日本不卡视频| 国产第一页在线播放| 亚洲男子天堂网| 91麻豆精品| 国产一二三在线视频| 久久久久久一二三区| 97精品人妻一区二区三区| 色综合导航网站| 精品大片一区二区| 三级网站免费看| 91久久奴性调教| 日本小视频在线免费观看| 欧美日韩国产综合在线| 极品美女销魂一区二区三区| 日本亚洲色大成网站www久久| 亚洲精品小视频在线观看| 亚洲精品无播放器在线播放| 成人免费观看cn| 亚洲天堂福利av| 男人天堂亚洲二区| dy888夜精品国产专区| 老司机精品福利视频|