Django 模型是與數據庫相關的,與數據庫相關的代碼通常寫在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等數據庫,只須要在settings.py中配置便可,不用更改models.py中的代碼,豐富的API極大的方便了使用。python
1、打開model文件,修改其中代碼正則表達式
from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField()
咱們新建了一個Person類,繼承自models.Model, 一我的有姓名和年齡。這裏用到了兩種Field,更多Field類型能夠參考教程最後的連接。sql
說明:這部分的做用在於建立咱們業務須要的數據表及其結構,當咱們在這以後執行同步數據庫的時候會建立這些表,若是已經建立則忽略,若是有修改也會進行更新操做。shell
2、同步數據庫數據庫
在同步數據庫以前,咱們須要設置數據庫,若是你用的是SQLite3,則無需配置,若是你使用的是其餘Django內置的數據庫,參考Django的教程也能很快進行配置,我用的數據庫是SQL Server,由於它不是Django自身支持的數據之一,因此配置這個數據庫須要用到第三方模塊。中間遇到很多坑,最終配置成功,現將主要步驟介紹一下:django
一、第三方庫django-pyodbc-azure,使用這個庫的基礎是Django 1.10.4 和pyodbc 3.0 or newerthis
pip install django-pyodbc-azure
Here is an example of the database settings:spa
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'Django_test', 'USER': 'sa', 'PASSWORD': '*****', 'HOST': '127.0.0.1', 'PORT': '', 'OPTIONS': { 'driver':'SQL Server Native Client 11.0', 'MARS_Connection': True, }, }, } # set this to False if you want to turn off pyodbc's connection pooling DATABASE_CONNECTION_POOLING = False
設置完成以後,就能夠對數據進行同步了,執行以下兩條代碼便可:code
python manage.py makemigrations
python manage.py migrate
咱們會看到,Django生成了一系列的表.server
Django提供了豐富的API, 下面演示如何使用它。
$ python manage.py shell >>> from people.models import Person >>> Person.objects.create(name="Jason", age=28) <Person: Person object>
如何從數據庫是查詢數據
>>> Person.objects.get(name="Jason") <Person: Person object>
咱們用了一個 .objects.get() 方法查詢出來符合條件的對象,可是你們注意到了沒有,查詢結果中顯示<Person: Person object>,這裏並無顯示出與WeizhongTu的相關信息,若是用戶多了就沒法知道查詢出來的究竟是誰,查詢結果是否正確,咱們從新修改一下 people/models.py
name 和 age 等字段中不能有 __(雙下劃線,由於在Django QuerySet API中有特殊含義(用於關係,包含,不區分大小寫,以什麼開頭或結尾,日期的大於小於,正則等)
也不能有Python中的關鍵字,name 是合法的,student_name 也合法,可是student__name不合法,try, class, continue 也不合法,由於它是Python的關鍵字( import keyword; print(keyword.kwlist) 能夠打出全部的關鍵字)
from django.db import models class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField() def __str__(self): return self.name
知識補充:
新建一個對象的方法有如下幾種:
p.save()
p.age = 23
p.save()
這種方法是防止重複很好的方法,可是速度要相對慢些,返回一個元組,第一個爲Person對象,第二個爲True或False, 新建時返回的是True, 已經存在時返回False.
獲取對象有如下方法:
參考文檔:
Django models 官方教程: https://docs.djangoproject.com/en/dev/topics/db/models/
Fields相關官方文檔:https://docs.djangoproject.com/en/dev/ref/models/fields/