Django 模型是與數(shù)據(jù)庫相關(guān)的,與數(shù)據(jù)庫相關(guān)的代碼一般寫在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等數(shù)據(jù)庫,只需要在settings.py中配置即可,不用更改models.py中的代碼,豐富的API極大的方便了使用。本節(jié)的代碼:(Django 1.6, Python 2.7 測試環(huán)境) 大家可以按照我的步驟來開始做: django-admin.py startproject learn_models # 新建一個項目 cd learn_models # 進(jìn)入到該項目的文件夾 django-admin.py startapp people # 新建一個 people 應(yīng)用(app) 補(bǔ)充:新建app也可以用 python manage.py startapp people, 需要指出的是,django-admin.py 是安裝Django后多出的一個命令,并不是指一個 django-admin.py 腳本在當(dāng)前目錄下。 那么project和app什么關(guān)系呢,一個項目一般包含多個應(yīng)用,一個應(yīng)用也可以用在多個項目中。 將我們新建的應(yīng)用(people)添加到 settings.py 中的 INSTALLED_APPS中,也就是告訴Django有這么一個應(yīng)用。 INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'people', ) 我們打開 people/models.py 文件,修改其中的代碼如下: from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() 我們新建了一個Person類,繼承自models.Model, 一個人有姓名和年齡。這里用到了兩種Field,更多Field類型可以參考教程最后的鏈接。 我們來同步一下數(shù)據(jù)庫(我們使用默認(rèn)的數(shù)據(jù)庫 SQLite3,無需配置) python manage.py syncdb # 進(jìn)入 manage.py 所在的那個文件夾下輸入這個命令 注意:Django 1.7 及以上的版本需要用以下命令 python manage.py makemigrations python manage.py migrate 我們會看到,Django生成了一系列的表,也生成了我們新建的people_person這個表,那么如何使用這個表呢? Django提供了豐富的API, 下面演示如何使用它。 $ python manage.py shell >>> from people.models import Person >>> Person.objects.create(name="WeizhongTu", age=24) <Person: Person object> >>> 我們新建了一個用戶WeizhongTu 那么如何從數(shù)據(jù)庫是查詢到它呢? >>> Person.objects.get(name="WeizhongTu") <Person: Person object> >>> 我們用了一個 .objects.get() 方法查詢出來符合條件的對象,但是大家注意到了沒有,查詢結(jié)果中顯示<Person: Person object>,這里并沒有顯示出與WeizhongTu的相關(guān)信息,如果用戶多了就無法知道查詢出來的到底是誰,查詢結(jié)果是否正確,我們重新修改一下 people/models.py name 和 age 等字段中不能有 __(雙下劃線,因為在Django QuerySet API中有特殊含義(用于關(guān)系,包含,不區(qū)分大小寫,以什么開頭或結(jié)尾,日期的大于小于,正則等) 也不能有Python中的關(guān)鍵字,name 是合法的,student_name 也合法,但是student__name不合法,try, class, continue 也不合法,因為它是Python的關(guān)鍵字( import keyword; print(keyword.kwlist) 可以打出所有的關(guān)鍵字) from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __unicode__(self): # 在Python3中使用 def __str__(self) return self.name 按CTRL + C退出當(dāng)前的Python shell, 重復(fù)上面的操作,我們就可以看到: 新建一個對象的方法有以下幾種:
獲取對象有以下方法:
參考文檔: Django models 官方教程: https://docs./en/dev/topics/db/models/ Fields相關(guān)官方文檔:https://docs./en/dev/ref/models/fields/ |
|