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/