1.ORM简介:
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
ORM的概念 :
让我们从O/R开始。字母O起源于”对象”(Object),而R则来自于”关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
models的简单编写:
# _*_ coding: utf-8 _*_
from __future__ import unicode_literals
from django.db import models
# Create your models here.
class UserMessage(models.Model):
name = models.CharField(max_length=20, verbose_name=u"用户名")
email = models.EmailField(verbose_name=u"邮箱")
address = models.CharField(max_length=100, verbose_name=u"联系地址")
message = models.CharField(max_length=500, verbose_name=u"留言信息")
class Meta:
verbose_name = u"用户留言信息"
# verbose_name_plural = verbose_name #一种复数信息,如果不指定,则会在我们的verbose后面添加一个s
# db_table = "user_message"
# ordering = "-object_id"
models常见数据类型:
models.CharField 字符类型
models.EmailField 邮箱类型
models.ForeignKey 外键类型
models.DateField 时间类型
models.IntegerField 整形
models.IPAddressField IP资源类型
models.FileField 文件上传类型
models.ImageField 图片类型
使用pycharm,在models.py里选中models,按住ctrl,再点击models,跳转到models模块页,选中field,按住ctrl,再点击field, 即可查看更多models类型。类型如下:
__all__ = [str(x) for x in (
'AutoField', 'BLANK_CHOICE_DASH', 'BigIntegerField', 'BinaryField',
'BooleanField', 'CharField', 'CommaSeparatedIntegerField', 'DateField',
'DateTimeField', 'DecimalField', 'DurationField', 'EmailField', 'Empty',
'Field', 'FieldDoesNotExist', 'FilePathField', 'FloatField',
'GenericIPAddressField', 'IPAddressField', 'IntegerField', 'NOT_PROVIDED',
'NullBooleanField', 'PositiveIntegerField', 'PositiveSmallIntegerField',
'SlugField', 'SmallIntegerField', 'TextField', 'TimeField', 'URLField',
'UUIDField',
)]
modles编写不设置主键时,会默认生成一个ID字段作为主键,当自定义主键时,ID字段就会被删除:
object_id = models.CharField(max_length=20,default="",primary_key=True,verbose_name=u"主键")
执行makemigrations message和migrate:
新建的项目若统一放置在apps目录下,则setting需要注册该app:
import os
import sys
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'x$$#f#v$@wrn%$oe%f_&0ul(l8(@&54yw$wtc22&yg@git*100'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'message',
]
pycharm下执行tools-run manage task:底下交互环境执行 makemigrations message 和migrate,生成数据表如下: