Python數(shù)據(jù)庫操作,針對(duì)pymysql 和 MYSQL數(shù)據(jù)庫

此文將以MYSQL數(shù)據(jù)庫做為例子,pymysql庫作為驅(qū)動(dòng)進(jìn)行學(xué)習(xí)

安裝MYSQL數(shù)據(jù)庫與pymysql第三方庫

  • 安裝MYSQL數(shù)據(jù)庫,請(qǐng)點(diǎn)擊https://dev.mysql.com/downloads/installer/安裝MYSQL的社區(qū)版本

  • 安裝pymysql庫不多做敘述

  • 安裝navicat for mysql,此程序用來管理MYSQL數(shù)據(jù)庫

    • 注意: 連接過程中可能會(huì)出現(xiàn)1251錯(cuò)誤

    • 解決辦法,在cmd命令下登錄mysql后輸入:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql的密碼'; 注意:引號(hào)中的為你自己設(shè)置的sql數(shù)據(jù)庫的密碼

      • FLUSH PRIVILEGES;

pymysql 連接mysql數(shù)據(jù)庫的驅(qū)動(dòng)庫

  • Connection(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 = <class'pymysql.cursors.Cursor'>苛秕,init_command = None肌访,connect_timeout = 10,ssl = None艇劫,read_default_group = None吼驶,compress = None,named_pipe = None,自動(dòng)提交=假蟹演,分貝=無风钻,passwd的=無,local_infile =假酒请,max_allowed_pa??cket個(gè)= 16777216骡技,defer_connect =假,auth_plugin_map =無羞反,read_timeout =無布朦,write_timeout =無,bind_address =無昼窗,binary_prefix =假是趴,程序名=無,server_public_key =無)

    • read_timeout - 以秒為單位讀取連接的超時(shí)(默認(rèn)值:無 - 無超時(shí))
    • write_timeout - 以秒為單位寫入連接的超時(shí)(默認(rèn)值:無 - 無超時(shí))
    • charset - 你要使用的Charset澄惊。
    • sql_mode - 要使用的默認(rèn)SQL_MODE右遭。
    • read_default_file - 指定my.cnf文件以從[client]部分下讀取這些參數(shù)。
    • conv - 使用轉(zhuǎn)換字典而不是默認(rèn)字典缤削。這用于提供類型的自定義編組和解組窘哈。見轉(zhuǎn)換器。
    • use_unicode - 是否默認(rèn)為unicode字符串亭敢。對(duì)于Py3k滚婉,此選項(xiàng)默認(rèn)為true。
    • client_flag - 要發(fā)送給MySQL的自定義標(biāo)志帅刀。在constants.CLIENT中查找潛在值让腹。
    • cursorclass - 要使用的自定義游標(biāo)類。
    • init_command - 建立連接時(shí)要運(yùn)行的初始SQL語句扣溺。
    • connect_timeout - 連接時(shí)拋出異常之前的超時(shí)骇窍。(默認(rèn)值:10,最小值:1锥余,最大值:31536000)
    • ssl - 類似于mysql_ssl_set()參數(shù)的參數(shù)的dict腹纳。目前,不支持capath和cipher參數(shù)驱犹。
    • read_default_group - 要在配置文件中讀取的組嘲恍。
    • compress - 不支持
    • named_pipe - 不支持
    • autocommit - 自動(dòng)提交模式。無表示使用服務(wù)器默認(rèn)值雄驹。(默認(rèn)值:False)
    • local_infile - 允許使用LOAD DATA LOCAL命令的布爾值佃牛。(默認(rèn)值:False)
    • max_allowed_pa??cket - 發(fā)送到服務(wù)器的最大數(shù)據(jù)包大小(以字節(jié)為單位)医舆。(默認(rèn)值:16MB)僅用于限制小于默認(rèn)值(16KB)的“LOAD LOCAL INFILE”數(shù)據(jù)包的大小俘侠。
    • defer_connect - 不要明確連接contruction - 等待連接調(diào)用象缀。(默認(rèn)值:False)
    • auth_plugin_map - 插件名稱的一個(gè)字典,用于處理該插件的類爷速。該類將Connection對(duì)象作為構(gòu)造函數(shù)的參數(shù)央星。該類需要一個(gè)認(rèn)證方法,將認(rèn)證包作為參數(shù)遍希。對(duì)于對(duì)話框插件等曼,可以使用提示(echo里烦,prompt)方法(如果沒有authenticate方法)從用戶返回字符串凿蒜。(實(shí)驗(yàn))
    • server_public_key - SHA256 authenticnticaiton插件公鑰值。(默認(rèn):無)
    • db - 數(shù)據(jù)庫的別名胁黑。(與MySQLdb兼容)
    • passwd - 密碼的別名废封。(與MySQLdb兼容)
    • binary_prefix - 在字節(jié)和bytearray上添加_binary前綴。(默認(rèn)值:False)
  • 常用方法

    • select_db(db) 設(shè)置db為當(dāng)前數(shù)據(jù)庫

    • cursor() 創(chuàng)建一個(gè)游標(biāo)對(duì)象,繼而對(duì)數(shù)據(jù)進(jìn)行操作

      • 游標(biāo)對(duì)象方法:

      • execute(query丧蘸,args = None ) 執(zhí)行sql語句

      • executemany(query漂洋,args ) 運(yùn)行多個(gè)sql語句

      • fetchall() 獲取所有行

      • fetchmany(size = None ) 獲取指定行數(shù)

      • fetchone() 獲取下一行

      • close() 關(guān)閉游標(biāo),將緩存的數(shù)據(jù)全部釋放到數(shù)據(jù)庫中

    • commit() 提交對(duì)數(shù)據(jù)庫中數(shù)據(jù)的修改,使之持久化到數(shù)據(jù)庫中

    • close() 關(guān)閉套接字連接退出

SQL語句

  • SQL 是一門 ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語言,用來訪問和操作數(shù)據(jù)庫系統(tǒng)

  • MySQL 數(shù)據(jù)類型

    • Text 類型
    image
    • Number 類型
    image
    • Date 類型
    image

SQL的語句分為兩大類,一類是DML,另一類是DDL

數(shù)據(jù)定義語言 (DDL) 用于創(chuàng)建或刪除表格

  • CREATE DATABASE 創(chuàng)建新數(shù)據(jù)庫

    • 語句: CREATE DATABASE database_name
    import pymysql
    
    con = pymysql.connect('localhost','root','123456')
    
    sql = '''CREATE DATABASE test
    '''
    with con.cursor()as cursor:
        cursor.execute(sql)
    
    con.close()
    
  • CREATE TABLE 創(chuàng)建新表

    • 語句為以下形式,其中約束可以沒有
    CREATE TABLE 表名稱
    (
    列名稱1 數(shù)據(jù)類型 約束,
    列名稱2 數(shù)據(jù)類型 約束,
    列名稱3 數(shù)據(jù)類型 約束,
    ....
    ) 
    
    • 約束條件

      • NOT NULL 值不能為空

      • UNIQUE 設(shè)置索引,一個(gè)表中可以有多個(gè)索引

        • 在創(chuàng)建表時(shí),末尾加上該語句

        UNIQUE(列名稱)

        • 表創(chuàng)建以后添加索引
        ALTER TABLE 表名稱
        ADD UNIQUE (列名稱) 
        
        • 撤銷索引
        ALTER TABLE 表名稱
        DROP INDEX 列名稱 
        
      • PRIMARY KEY 設(shè)置主鍵,一個(gè)表中只能有一個(gè)主鍵

        • 在創(chuàng)建表時(shí),末尾加上該語句

        PRIMARY KEY (列名稱)

        • 表創(chuàng)建后添加主鍵
        ALTER TABLE表名稱
        ADD PRIMARY KEY (列名稱) 
        
        • 撤銷表中的主鍵
        ALTER TABLE 表名稱
        DROP PRIMARY KEY 
        
      • FOREIGN KEY 一個(gè)表中的 FOREIGN KEY 指向另一個(gè)表中的 PRIMARY KEY

        • 在創(chuàng)建表時(shí),末尾加上該語句

        FOREIGN KEY (列名稱) REFERENCES 表名稱(列名稱)

        • 表創(chuàng)建后添加FOREIGN KEY
        ALTER TABLE 表名稱1
        ADD FOREIGN KEY (列名稱)
        REFERENCES 表名稱2(列名稱)
        
        • 刪除表中的PRIMARY KEY
        ALTER TABLE 表名稱
        DROP FOREIGN KEY 約束名稱
        
      • CHECK 限制列中的值的范圍

        • 在創(chuàng)建表時(shí),末尾加上該語句

        CHECK (列名稱 范圍限制)

        • 表創(chuàng)建后添加限制范圍
        ALTER TABLE 表名稱
        ADD CHECK (列名稱 范圍限制)
        
        • 撤銷范圍限制
        ALTER TABLE 表名稱
        DROP CONSTRAINT 約束名稱
        
      • DEFAULT 向列中插入默認(rèn)值

        • 在創(chuàng)建表時(shí),向數(shù)據(jù)后添加默認(rèn)值

        列名稱 數(shù)據(jù)類型 DEFALUT 默認(rèn)值

      • 表創(chuàng)建后添加默認(rèn)值

      ALTER TABLE 表名稱
      ALTER 列名稱 SET DEFAULT 默認(rèn)值 
      
      • 刪除默認(rèn)值
      ALTER TABLE 表名稱
      ALTER 列名稱 DROP DEFAULT 
      
    • AUTO_INCREMENT 新記錄插入表中時(shí)生成一個(gè)唯一的數(shù)字

      • 在創(chuàng)建表時(shí),在后面添加該字段即可

      列名稱 int NOT NULL AUTO_INCREMENT

      • 默認(rèn)以1開始遞增,但也可以通過賦值來改變初始值

      ALTER TABLE 表名稱 AUTO_INCREMENT=100

      • 創(chuàng)建新數(shù)據(jù)是不必向該數(shù)據(jù)進(jìn)行賦值,但應(yīng)加上NULL,代替該數(shù)據(jù),會(huì)自動(dòng)進(jìn)行賦值
# 新建一個(gè)名為person的表,定義有id,name,age,address 其中id設(shè)置為主鍵,并采取自增形式

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''CREATE TABLE person
(
id INT(255) NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
age INT(100),
address VARCHAR(255)
)
'''
with con.cursor()as cursor:
    cursor.execute(sql)

con.close()
  • CREATE INDEX 創(chuàng)建表中的引索

    • 用于加速搜索數(shù)據(jù),用戶無法看見,只需設(shè)置常用的列

    • 使用以下語句

    CREATE INDEX 引索名稱
    ON 表名稱 (列名稱)
    
  • DROP 刪除索引力喷、表和數(shù)據(jù)庫

    • 刪除表

    DROP TABLE 表名稱

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

    DROP DATABASE 數(shù)據(jù)庫名稱

    • 刪除表中數(shù)據(jù),但保留表

    TRUNCATE TABLE 表名稱

  • ALTER TABLE 在已有的表中添加刽漂、修改或刪除列

    • 向表中添加列
    ALTER TABLE 表名稱
    ADD 列名稱 列類型  
    
    • 向表中刪除列
    ALTER TABLE 表名稱 
    DROP COLUMN 列名稱
    
    • 更改表中某一列的數(shù)據(jù)類型
    ALTER TABLE 表名稱
    ALTER COLUMN 列名稱 列類型
    

數(shù)據(jù)操作語言 (DML) 包含用于更新、插入和刪除記錄的語法

  • SELECT 選取數(shù)據(jù)

    SELECT 列名稱 FROM 表名稱

  • SELECT DISTINCT 去掉重復(fù)數(shù)據(jù)

    SELECT DISTINCT 列名稱 FROM 表名稱

  • WHERE 有條件的選取數(shù)據(jù)

    SELECT 列名稱 FROM 表名稱 WHERE 列 運(yùn)算符 值

    • 運(yùn)算符
    =    等于
    <>  不等于
    >    大于
    <    小于
    >=  大于等于
    <=  小于等于
    
    • 操作符

      • IN 允許在 WHERE 子句中規(guī)定多個(gè)值,返回包含這些值的集合
      SELECT column_name(s)
      FROM table_name
      WHERE column_name IN (value1,value2,...)
      
      • BETWEEN 選取介于兩個(gè)值之間的數(shù)據(jù)范圍 左包右閉
      SELECT column_name(s)
      FROM table_name
      WHERE column_name
      BETWEEN value1 AND value2
      
    • AND 和 OR 對(duì)一個(gè)以上的條件對(duì)記錄進(jìn)行過濾

    SELECT * FROM 表名稱 WHERE 列名稱 運(yùn)算符 值 AND 列名稱 運(yùn)算符 值

    總結(jié): 可以將AND OR WHERE 組合起來使用,用于查找精確的數(shù)據(jù)

    • LIKE 于在 WHERE 子句中搜索列中的指定模式,類似于正則表達(dá)式

      SELECT column_name(s)
      FROM table_name
      WHERE column_name LIKE pattern
      
      • 通配符
    image
    • ORDER BY 語句用于對(duì)結(jié)果集進(jìn)行排序

      • 默認(rèn)順序排序,字母以ABC形式,數(shù)字從大到小

      SELECT 列名稱 FROM 表名稱 ORDER BY 列名稱

      • 添加DESC可變?yōu)槟嫘蚺判?/li>

      SELECT 列名稱 FROM 表名稱 ORDER BY 列名稱 DESC

    • LIMIT 規(guī)定返回?cái)?shù)據(jù)集合的最大值

    "SELECT column_name(s)
    FROM table_name
    LIMIT number"
    
  • INTO 從一個(gè)表中選取輸出并復(fù)制到另一個(gè)表中,用于備份數(shù)據(jù)庫

    • 備份到另一個(gè)數(shù)據(jù)庫中
    SELECT *
    INTO new_table_name IN externaldatabase
    FROM old_tablename  
    
    • 備份到另一個(gè)表中
    "SELECT *
    INTO Persons_backup
    FROM Persons   
    
  • INSERT INTO 項(xiàng)數(shù)據(jù)庫添加新行

    • 向一行中添加數(shù)據(jù)

    INSERT INTO 表名稱 VALUES (值1, 值2,....) 添加所有值

    • 向一行中選取的列中添加數(shù)據(jù)

    INSERT INTO 表名稱 (列1, 列2,...) VALUES (值1, 值2,....)

  • UPDATE 修改表中的數(shù)據(jù)

    • 修改某列數(shù)據(jù)為某值的數(shù)據(jù)為新值

    UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

    • 向某行中的多列修改數(shù)據(jù)

    UPDATE 表名稱 SET 列名稱1 = 新值1,列名稱2 = 新值2,…. WHERE 列名稱 = 某值

  • DELETE 刪除表中的行

    • 刪除列名稱為某值的所有行

    DELETE FROM 表名稱 WHERE 列名稱 = 值

    • 刪除所有行,即清空所有數(shù)據(jù)

    DELETE * FROM table_name

向數(shù)據(jù)庫的person表中寫入一行數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = ''' INSERT INTO person VALUES(NULL,'jack',18,'Beijing')
'''
with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()
con.close()
寫入多行數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

list = [(None,'jack',18,'beijing'),(None,'bob',20,'shanghai'),(None,'alice',10,'beijing'),(None,'luna',18,'shengzheng')]

with con.cursor()as cursor:
    cursor.executemany('INSERT INTO person VALUES(%s,%s,%s,%s)',list)

con.commit()

con.close()
查找所有數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = 'SELECT * FROM person'

with con.cursor()as cursor:
    cursor.execute(sql)
    data = cursor.fetchall()
    for i in data:
        print(i)

con.close()
查找所有地址為beijing的數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where address = 'beijing'"

with con.cursor()as cursor:
    cursor.execute(sql)
    data = cursor.fetchall()
    for i in data:
        print(i)

con.close()
查找所有age大于10的數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where age > 10"

with con.cursor()as cursor:
    cursor.execute(sql)
    data = cursor.fetchall()
    for i in data:
        print(i)

con.close()
查找age大于10并且address等于bejing的數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where age > 10 AND address = 'beijing'"

with con.cursor()as cursor:
    cursor.execute(sql)
    data = cursor.fetchall()
    for i in data:
        print(i)

con.close()
將所有數(shù)據(jù)按年齡大小進(jìn)行逆序排序
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person ORDER BY age DESC"

with con.cursor()as cursor:
    cursor.execute(sql)
    data = cursor.fetchall()
    for i in data:
        print(i)

con.close()
修改表中jack的age為16
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "UPDATE person set age = 16 WHERE name = 'jack'"

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
刪除數(shù)據(jù)庫中jack的數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "DELETE FROM person WHERE name = 'jack'"

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
刪除表中所有數(shù)據(jù)
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "DELETE FROM person"

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
向表中添加sex列,類型為varchar
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''ALTER TABLE person
ADD sex VARCHAR(255)
'''

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
刪除表
import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''DROP TABLE person
'''

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
刪除數(shù)據(jù)庫
import pymysql

con = pymysql.connect('localhost','root','123456')

sql = '''DROP DATABASE test
'''

with con.cursor()as cursor:
    cursor.execute(sql)

con.commit()

con.close()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弟孟,一起剝皮案震驚了整個(gè)濱河市贝咙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拂募,老刑警劉巖庭猩,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陈症,居然都是意外死亡蔼水,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門录肯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趴腋,“玉大人,你說我怎么就攤上這事论咏∮谘” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵潘靖,是天一觀的道長穿剖。 經(jīng)常有香客問我,道長卦溢,這世上最難降的妖魔是什么糊余? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任秀又,我火速辦了婚禮,結(jié)果婚禮上贬芥,老公的妹妹穿的比我還像新娘吐辙。我一直安慰自己,他們只是感情好蘸劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布昏苏。 她就那樣靜靜地躺著,像睡著了一般威沫。 火紅的嫁衣襯著肌膚如雪贤惯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天棒掠,我揣著相機(jī)與錄音孵构,去河邊找鬼。 笑死烟很,一個(gè)胖子當(dāng)著我的面吹牛颈墅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雾袱,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恤筛,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了芹橡?” 一聲冷哼從身側(cè)響起毒坛,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎僻族,沒想到半個(gè)月后粘驰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡述么,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蝌数,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片度秘。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顶伞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剑梳,到底是詐尸還是另有隱情唆貌,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布垢乙,位于F島的核電站锨咙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏追逮。R本人自食惡果不足惜酪刀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一粹舵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骂倘,春花似錦眼滤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至荧库,卻和暖如春堰塌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背电爹。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工蔫仙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留料睛,地道東北人丐箩。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像恤煞,于是被迫代替她去往敵國和親屎勘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容