03-Django模型

一、模型

Django對各種數(shù)據(jù)庫提供了很好的支持,Django為這些數(shù)據(jù)庫提供了統(tǒng)一的調(diào)用API(即不管底層操作哪種數(shù)據(jù)庫,我們只管模型對象操作即可封锉,其實就是屏蔽掉數(shù)據(jù)庫操作的差異性),這就可以根據(jù)不同的業(yè)務需求選擇不同的數(shù)據(jù)庫膘螟。

二成福、配置數(shù)據(jù)

  • 在工程目錄下init.py文件
import pymysql
pymysql.install_as_MySQLdb()

安裝鏈接mysql的驅(qū)動: pip install pymysql

  • 在工程目錄下settings.py文件中,修改DATABASES
DATABASES = {
    'default': {
        # 修改為mysql(驅(qū)動)
        'ENGINE': 'django.db.backends.mysql',   
        # 鏈接數(shù)據(jù)庫荆残,并創(chuàng)建對應的數(shù)據(jù)庫HelloDjango
        'NAME': 'HelloDjango',
        # 用戶名
        'USER': 'root',
        # 密碼
        'PASSWORD': '123456',
        # 主機
        'HOST': '127.0.0.1',
        # 端口號
        'POST': '3306'
    }
}

三奴艾、模型開發(fā)流程

  • 配置數(shù)據(jù)庫(創(chuàng)建對應數(shù)據(jù),數(shù)據(jù)庫上述配置)
  • 定義模型類(一個模型類對應一個表單)
  • 生成遷移文件(python3 manage.py makemigrations)
  • 執(zhí)行遷移文件内斯,生成對應表單(python3 manage.py migrate)
  • 使用模型類進行增刪改查

四蕴潦、ORM

  • 概述
O: 對象
R: 關系
M: 映射
  • 任務
- 根據(jù)對象類型生成表結(jié)構(gòu);
- 將對象、列表的操作轉(zhuǎn)換sql語句;
- 將sql語句查詢到的結(jié)果轉(zhuǎn)為對象俘闯、列表;

五潭苞、屬性定義

  • 概述
- Django根據(jù)屬性的類型確定以下信息:
    當前選擇的數(shù)據(jù)庫支持字段的類型;
    渲染管理表單時使用的默認html控件;
    在管理站點最低限度的驗證;
- Django的主鍵
    會為表增加自增長的主鍵列,每個模型只能有一個主鍵列真朗;
    如果使用選項設置某屬性為主鍵列后此疹,則Django不會再生成默認的主鍵列;
- 屬性命名規(guī)則:
    遵循標識符規(guī)則;
    由于Django的查詢方式,不允許使用連續(xù)的下劃線;
- 定義屬性時
    需要字段類型遮婶,字段類型是被定義在django.db.models.fields目錄下;
    為了方便使用秀菱,被導入到django.db.models中;
- 使用方式
    導入from django.db import models;
    通過models.field創(chuàng)建字段類型的對象,賦值給屬性;
  • 邏輯刪除
對于重要數(shù)據(jù)都做邏輯刪除蹭睡,不做物理刪除;
實現(xiàn)方法是定義isDelete屬性,類型為BooleanField赶么,默認值為False;
  • 字段類型
- AutoField
    一個根據(jù)實際ID自動增長的IntegerField肩豁,通常不指定;
    如果不指定,一個主鍵字段將自動添加到模型中;
- CharField(max_length=字段長度)
    字符串清钥,默認的表單樣式TextInput;
- TextField
    大文本字段琼锋,一般超過4000使用,默認的表單控件是Textarea;
- IntegerField
    整數(shù);
- DecimalField(max_digits=None, decimal_places=None)
    使用python的Decimal實例表示的十進制浮點數(shù);
    DecimalField.max_digits: 位數(shù)總數(shù);
    DecimalField.decimal_places: 小數(shù)點后的數(shù)字位數(shù);
- FloatField
    用Python的float實例來表示的浮點數(shù);
- BooleanField
    true/false 字段祟昭,此字段的默認表單控制是CheckboxInput;
- NullBooleanField
    支持null缕坎、true、false三種值;
- DateField([auto_now=False, auto_now_add=False])
    使用Python的datetime.date實例表示的日期;
    DateField.auto_now: 每次保存對象時篡悟,自動設置該字段為當前時間谜叹,默認是False;
    DateField.auto_now_add: 當對象第一次被創(chuàng)建時自動設置當前時間,它總是使用當前日期,默認是False;
    auto_now_add, auto_now, and default 這些設置是相互排斥的搬葬,他們之間的任何組合將會發(fā)生錯誤的結(jié)果;
- TimeField
    使用Python的datetime.time實例表示的時間荷腊,參數(shù)同DateField;
- DateTimeField
    使用Python的datetime.datetime實例表示的日期和時間,參數(shù)同DateField;
- FileField
    一個上傳文件的字段;
- ImageField
    繼承了FileField的所有屬性和方法急凰,但對上傳的對象進行校驗女仰,確保它是個有效的image;
  • 字段選項(通過字段選項,可以實現(xiàn)對字段的約束)
- null
    如果為True抡锈,Django 將空值以NULL 存儲到數(shù)據(jù)庫中疾忍,默認值是 False;
- blank
    如果為True,則該字段允許為空白床三,默認值是 False;
    null是數(shù)據(jù)庫范疇的概念一罩,blank是表單驗證證范疇的;
- db_column
    字段的名稱,如果未指定勿璃,則使用屬性的名稱;
- db_index
    若值為 True, 則在表中會為此字段創(chuàng)建索引;
- default
    默認值;
- primary_key
    若為 True, 則該字段會成為模型的主鍵字段;
- unique
    如果為 True, 這個字段在表中必須有唯一值;
  • 關系
- ForeignKey:一對多擒抛,將字段定義在多的端中
    格式: 對象.模型類小寫_set
    示例: grade.students_set
- OneToOneField:一對一,將字段定義在任意一端中
    格式: 對象.模型類小寫
    示例: grade.students
- 訪問id
    格式: 對象.屬性_id
    示例: student.sgrade_id
- ManyToManyField:多對多补疑,將字段定義在兩端中

外鍵: 屬于數(shù)據(jù)庫約束

外鍵默認是可以重復的歧沪,對應另外一張表的主鍵(一對多)

六、模型查詢之基本使用

查詢集表示從數(shù)據(jù)庫獲取的對象集合莲组。
查詢集合可以有多個過濾器诊胞。
過濾器就是一個函數(shù),基于所給的參數(shù)限制查詢結(jié)果锹杈。
從SQL角度來說撵孤,查詢集合與select等價,過濾器就像where條件竭望。

  • 查詢集
- 在管理器上調(diào)用過濾器方法返回查詢集;
- 查詢集經(jīng)過過濾器篩選后返回新的查詢集邪码,所以可以寫出鏈式調(diào)用;
- 惰性執(zhí)行(創(chuàng)建查詢集不會帶任何數(shù)據(jù)訪問,直到調(diào)用數(shù)據(jù)時才會訪問數(shù)據(jù))
  • 直接訪問的情況
- 迭代
- 序列化
- 與if合用
  • 過濾器(返回查詢集)
- all() 返回查詢集中所有數(shù)據(jù)(一條數(shù)據(jù)即一個對象)
    students = Student.objects.all()
- filter() 返回符合要求的數(shù)據(jù)
    filter(鍵=值)
    filter(鍵=值,鍵=值)
    filter(鍵=值).filter(鍵=值)
    students = Student.objects.filter(s_score=91)
    students = Student.objects.filter(s_score__lt=60)
- exclude() 過濾掉符合條件的數(shù)據(jù)
    students = Student.objects.exclude(s_score=91)
- order_by() 排序
    students = Student.objects.order_by('s_score')  # 升序
    students = Student.objects.order_by('-s_score') # 降序
- values() 返回查詢集中所有數(shù)據(jù)(一條數(shù)據(jù)即一個字典)咬清,返回一個列表
  • 返回單個數(shù)據(jù)
- get() 返回一個滿足條件的對象
    如果沒有找到符合條件的對象闭专,會引發(fā)'DoesNotExist'異常
    如果找到多個對象奴潘,會引發(fā)'MultipleObjectsReturned'異常
- count() 返回查詢集的對象個數(shù)
    students = Student.objects.filter(pk=1)
    if students.count()>0:  # 有數(shù)據(jù)
        pass
    else:
        pass
- first() 返回查詢集中的第一個對象
    student = students.first()
- last() 返回查詢集中的最后一個對象
    students = students.last()
- exists() 判斷查詢集中是否有數(shù)據(jù),有數(shù)據(jù)返回True
    if students.exists():   # 有數(shù)據(jù)
        pass
    else:
        pass

students = Student.objects.get(pk=91), pk是primary key縮寫影钉!

  • 限制查詢集(切片)
查詢集返回列表画髓,可以使用下標的方法進行限制,等同于sql語句中的limit語句;
例如: studentList = Students.objects.all()[0:5]
注意: 下標不能是負數(shù)
  • 查詢集緩存
- 每個查詢集都包含一個緩存平委,來最小化的數(shù)據(jù)訪問
- 在新建的查詢集時奈虾,緩存首次為空,第一次對查詢集求值廉赔,會發(fā)生數(shù)據(jù)緩存
- django會將查詢出來的數(shù)據(jù)做一個緩存肉微,并返回查詢結(jié)果,以后查詢直接使用查詢集的緩存
  • 元選項
- 在模型類中定義Mata類昂勉,用于設置元信息
- db_table屬性
    定義數(shù)據(jù)表名浪册,推薦使用小寫字母,數(shù)據(jù)表名默認為項目名小寫_類名;
- ordering屬性
    對象的默認排序字段岗照,獲取對象的列表時使用村象;
    ordering = ['id'] 升序
    ordering = ['-id'] 降序
    ordering = ['sage'] 按sage升序
    注意: 排序會增加數(shù)據(jù)庫的開銷;
# 學生表students
class Students(models.Model):
    # 在沒有添加主鍵時,它會在生成時自動添加主鍵
    # id          = models.IntegerField()
    sname       = models.CharField(max_length=30)
    ssex        = models.CharField(max_length=10)
    sage        = models.IntegerField()
    sbrief      = models.CharField(max_length=50)
    isdel       = models.BooleanField(default=False)
    lastTime = models.DateTimeField(auto_now=True)
    createTime = models.DateTimeField(auto_now=True)

    # sclass = models.CharField(max_length=10)
    # 關聯(lián)外鍵(學生都會有一個班級)
    sclass = models.ForeignKey('Grades')

    def __str__(self):
        return '%s  %s' % (self.sname,self.sclass)


    # 元選項(元信息)
    class Meta:
        db_table= 'students'
        # ordering = ['id']
        ordering = ['sage']

str內(nèi)置方法攒至,一般說明類的說明厚者,或者自己定義輸出。

七迫吐、模型查詢之字段查詢

  • 概述
- 實現(xiàn)了sql中的where語句库菲,作為方法filter()、excluede()志膀、get()的參數(shù)
- 語法
    屬性名稱__比較運算符=值
- 外鍵
    屬性名_id
- 轉(zhuǎn)義
    like語句中使用%為了匹配占位
    filter(sname__contains='%')
  • 比較運算符
- exact 判斷(大小寫敏感)
    filter(isdel=False)
- contains 是否包含(大小寫敏感)
    studentList = Student.objects.filter(sname__contains='孫')
- startswith熙宇、endswith 以value開頭或結(jié)尾(大小寫敏感)
    studentList = Student.objects.filter(sname__startswith='孫')
備注: 
    以上四個前面加上i,表示不區(qū)分大小寫溉浙;
    iexact烫止、icontains、istartswith戳稽、iendswith

- isnull馆蠕、isnotnull 是否為空
    filter(sname__isnull=False)
- in 是否包含在范圍內(nèi)
    studentList = Students.objects.filter(pk__in=[2,3,4,5,6])
- gt大于、gte大于等于惊奇、lt小于互躬、lte小于等于
    studentList = Students.objects.filter(sage__gt=30)
- year、mouth颂郎、day吼渡、week_day、hour乓序、minute诞吱、second 時間相關
    studentList = Student.objects.filter(lastTime__year=2018)
    
- 跨關聯(lián)查詢 (處理join查詢)
    語法: 模型類名__屬性名__比較符
    例如: 學生描述中帶有'張三'的學生屬于哪個班級
        grade = Grades.objects.filter(students__sbrief__contains='張三')
- 查詢快捷 
    pk 代表主鍵(因為主鍵并不一定就是id字段)
    student = Students.objects.get(pk=3)
  • 聚合函數(shù)
使用aggregate()函數(shù)返回聚合函數(shù)的值【sql中的函數(shù)使用】
例如: Avg()舟奠、Count()、Max()房维、Min()、Sum()
實例: 
    from django.db.models import Max
    maxAge = STudents.objects.aggregate(Max('sage'))
  • F對象
- 可以使用模型的A屬性與B屬性進行比較.
    例如: Grades.objects.filter(ggirlnum__gt=F('gboynum'))

- 支持F對象的算術(shù)運算
    例如: Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)
  • Q對象
- 概述
    查詢條件的封裝
- 需求
    進行or查詢抬纸、進行and查詢咙俩、進行~查詢 【與或非操作】
- 解決
    使用Q對象
- 例如
    studentList = Students.objects.filter(Q(pk__lte=3) | Q(sage__gt=50))
    studentList = Students.objects.filter(Q(pk__lte=3)  # 只有一個Q對象就用于匹配
    studentList = Students.objects.filter(~Q(pk__lte=3) # 取反 

八、模型成員

  • 類屬性
- objects管理器
    是Manager類型的一個對象湿故,作用是與數(shù)據(jù)庫交互;
    當定義模型類是沒有指定管理器阿趁,則Django為模型創(chuàng)建一個名為objects的管理器;
- 自定義管理器
    當為模型指定模型管理器,Django就不在為模型類生成objects模型管理對象;
    studentsObj = models.Manager() # 自定義模型管理器
- 模型管理器作用
    模型管理器是Django的模型與數(shù)據(jù)庫進行交互的接口坛猪;
    一個模型可以有多個模型管理器;
- 自定義管理器Manager類
    向著管理器中添加額外的方法;
    修改管理器返回的原始查詢集(重寫get_queryset());
# 自定義管理器后
# Students.objects.all()  # 默認時
Students.studentObj.all()   # 自定義管理器為studentObj
<QuerySet [<Students: 韓俊  python05>, <Students: 申寶靜  python05>, <Students: 李嘉熙  python05>, <Students: 小紅  python05>, <Students: 陽亞霞  python01>, <Students: 老王  python04>, <Students: 向芳  python01>, <Students: 哈哈  python05>, <Students: 薛延美  python01>, <Students: 孫獅勤  python05>, <Students: 呵呵  python05>, <Students: 蕭十一郎  python06>, <Students: 武含  python06>, <Students: 李明志  python04>, <Students: 王子衡  python06>, <Students: 陸彥旭  python01>, <Students: 唐李超  python04>, <Students: 郝路杰  python06>, <Students: 夏明宇  python06>, <Students: 范育賓  python01>, '...(remaining elements truncated)...']>
# 自定義管理器Manager類
class StudentsManager(models.Manager):
    # 修改管理器返回的原始查詢集合
    def all(self):  
        # 調(diào)用父類方法脖阵,在父類方法基礎上進行再次過濾
        return super().all().filter(isdel=False)


# 學生表students
class Students(models.Model):
    # 自定義模型管理器
    studentObj1 = models.Manager()
    # 用到自定義管理器(對數(shù)據(jù)進行過濾)
    studentObj2 = StudentsManager()
    

# 使用1: Students.studentObj1.all()
# 使用2: Students.studentObj2.all()
  • 創(chuàng)建模型對象
- 目的
    向數(shù)據(jù)庫中添加數(shù)據(jù)

- 注意
    當創(chuàng)建對象時,django是不會對數(shù)據(jù)庫進行讀寫操作墅茉;
    當調(diào)用save()方法時才會與數(shù)據(jù)庫交互命黔,將對象保存到數(shù)據(jù)庫表單中;
    __init__方法已經(jīng)在父類models.Model中使用,在自定義的模型中無法使用;

- 在模型類中添加一個類方法(為了創(chuàng)建對象)
    # 學生表students [models.py文件中]
    class Students(models.Model):
        ...
        # 定義一個類方法創(chuàng)建對象
        @classmethod # 這表明就是類方法
        def createStudents(cls,name,sex,age,brief,grade,lastT,createT,isd=False):    # cls就表示Students這個類
            student = cls(sname=name,ssex=sex,sage=age,sbrief=brief,sclass=grade,lastTime=lastT,createTime=createT,isdel=isd)
            return  student
        
    # 調(diào)用即快速創(chuàng)建學生對象 [views.py文件中]
    stu = Students.createStudents('測試數(shù)據(jù)','男',18,'我是測試數(shù)據(jù)就斤,別太在意.',grade,'2018-05-30','2018-05-29')

- 在定義管理器中添加一個方法(為了創(chuàng)建對象)
    # 自定義管理器Manager類
    class StudentsManager(models.Manager):
        def all(self):  
        # 調(diào)用父類方法悍募,在父類方法基礎上進行再次過濾
        return super().all().filter(isdel=False)

        def createStudent(self,name,sex,age,brief,grade,lastT,createT,isd=False):
            # self.model() 其實就是創(chuàng)建Students對象
            stu = self.model()
            stu.sname = name
            stu.ssex = sex
            stu.sage = age
            stu.sbrief = brief
            stu.sclass = grade
            stu.lastTime = lastT
            stu.createTime = createT

            return  stu
            
    # 調(diào)用即快速創(chuàng)建學生對象 [views.py文件中]
    stu = Students.studentObj2.createStudent('測試數(shù)據(jù)','男',18,'我是測試數(shù)據(jù),別太在意.',grade,'2018-05-30','2018-05-29')

十洋机、數(shù)據(jù)庫的更換

使用了ORM對象關系映射坠宴,使用哪種數(shù)據(jù)庫操作都是一樣,就是在設置數(shù)據(jù)庫連接時不一樣绷旗。

DATABASES = {
    'default': {    # mysql 
        'ENGINE': 'django.db.backends.mysql',   # 驅(qū)動
        'NAME': 'HelloDjango',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}
DATABASES = {
    'default': {    # sqlite
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
    }
}

十一喜鼓、其他

  • 查詢數(shù)據(jù)
- 根據(jù)不同條件,獲取對應的數(shù)據(jù)
  • 添加數(shù)據(jù)
- 實例化模型對象
- 設置對象屬性
- 調(diào)用對象的save()方法
  • 更新數(shù)據(jù)
- 查詢獲取到需要更新的對象
- 設置對象數(shù)據(jù)
- 調(diào)用對象的save()方法
  • 刪除數(shù)據(jù)
 - 查詢獲取需要刪除出的對象
- 調(diào)用對象的delete()方法

作者:西門奄
鏈接:http://www.reibang.com/u/77035eb804c3
來源:簡書
簡書著作權(quán)歸作者所有衔肢,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處庄岖。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膀懈,隨后出現(xiàn)的幾起案子顿锰,更是在濱河造成了極大的恐慌,老刑警劉巖启搂,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼控,死亡現(xiàn)場離奇詭異,居然都是意外死亡胳赌,警方通過查閱死者的電腦和手機牢撼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疑苫,“玉大人熏版,你說我怎么就攤上這事纷责。” “怎么了撼短?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵再膳,是天一觀的道長。 經(jīng)常有香客問我曲横,道長喂柒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任禾嫉,我火速辦了婚禮灾杰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熙参。我一直安慰自己艳吠,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布孽椰。 她就那樣靜靜地躺著昭娩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弄屡。 梳的紋絲不亂的頭發(fā)上题禀,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音膀捷,去河邊找鬼迈嘹。 笑死,一個胖子當著我的面吹牛全庸,可吹牛的內(nèi)容都是我干的秀仲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼壶笼,長吁一口氣:“原來是場噩夢啊……” “哼神僵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起覆劈,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤保礼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后责语,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炮障,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年坤候,在試婚紗的時候發(fā)現(xiàn)自己被綠了胁赢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡白筹,死狀恐怖智末,靈堂內(nèi)的尸體忽然破棺而出谅摄,到底是詐尸還是另有隱情,我是刑警寧澤系馆,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布送漠,位于F島的核電站,受9級特大地震影響由蘑,放射性物質(zhì)發(fā)生泄漏螺男。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一纵穿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢人,春花似錦谓媒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至支救,卻和暖如春抢野,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背各墨。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工指孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贬堵。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓恃轩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親黎做。 傳聞我的和親對象是個殘疾皇子叉跛,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 一、模型 Django對各種數(shù)據(jù)庫提供了很好的支持蒸殿,Django為這些數(shù)據(jù)庫提供了統(tǒng)一的調(diào)用API(即不管底層操作...
    EndEvent閱讀 2,102評論 2 8
  • 模塊間聯(lián)系越多筷厘,其耦合性越強,同時表明其獨立性越差( 降低耦合性宏所,可以提高其獨立性)酥艳。軟件設計中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,062評論 0 8
  • 關于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 最近,陪小小魚的時間少了一些楣铁,主要是晚飯后我安排了運動玖雁。先是按照計劃完成日行一萬步的目標,接著是跳操半小時盖腕。 因為...
    余小魚MsYu閱讀 329評論 0 4
  • 曾經(jīng)聽到一句話赫冬,關于孤獨:不合群是表面的孤獨浓镜,合群了才是內(nèi)心的孤獨。
    def3973c167a閱讀 120評論 0 0