首先推荐两篇文章:http://www.cnblogs.com/yuanchenqi/articles/6083427.html十分全面。

另外和python---ORM之SQLAlchemy(1)等前面几篇文章相结合

1.ORM对象关系映射(Object Relational Mapping)

优点:

使用orm,对于数据库迁移十分有用,只需要修改相关引擎即可,
不用考虑是sqlite还是mysql,oracle等,
而且设计好类后,会自动生成相关表,数据。
但是对于一些简单的表可能会稍微有点多余,但是毕竟优点多余这些

orm类大概了解:

类名对应      数据库表名
类成员属性对应   数据库字段
类实例对应      数据库表中的一行数据

注意:使用orm时对应的数据库是在settings文件中红设置的,必须提前建库

create database 库名 default character set utf8 collate utf8_general_ci

相关配置请看python---django中models配置

2.模型常用字段类型介绍

   models.CharField
    #字符串字段,用于可变长字符串(varchar)
    #要求必须有一个参数maxlength,用于设置其所允许的最大字符串长度

    models.IntegerField
    #用于保存一个整数

    choice=(
        (1,''),
        (2,""),
        (3,"其他"),
    )
    models.IntegerField(choices=choice)
    # 枚举类型

    models.FloatField
    #浮点数保存,必须提供两个参数,max_digits总位数,decimal_places小数位数

    models.AutoField
    #一个IntegerField,添加记录时,自动增长
    #一般主键设置为他,models.AutoField(primary_key=True)
    #若是不指定主键,系统会自动添加一个主键字段到该表

    models.TextField
    #一个容量很大的文本字段
models.DateField #一个日期字段,可以带以下可选参数 #Argument 描述 #auto_now 当对象被保存时自动将该字段的值设为当前时间,通常表示“last
-modified”时间戳,最后一次修改的时间 #auto_new_add 当对象被创建时设置,即首次添加时的创建时间 models.DateTimeField #一个日期时间字段,和DateField类似

以下在数据库中本质都是字符串数据类型,此类字段只是在Django自带的admin中有用
    models.EmailField
    #检测email合法性的CharField,不需要maxlength
  models.FileField 
  #一个文件上传字段
  
  
  models.ImageField
  #图片上传字段,类似FileField
  
  
  models.IPAddressField
  #ip检验字段
  .....

其他字段:

db_index = True 表示设置索引
unique(唯一的意思) = True 设置唯一索引

联合唯一索引
class Meta:
unique_together = (
 ('email','ctime'),
)
联合索引(不做限制)
index_together = (
('email','ctime'),
)

ManyToManyField(RelatedField)  #多对多操作

3.字段参数:

null                 :    为空
default              :    设置默认值
primary_key          :    主键    若是自己没有设置主键,Django会自动添加上id = meta.AutoField('ID', primary_key=True)
unique               :    数据唯一
verbose_name         :    admin中字段的显示名称
db_column,
db_index             :    如果为真,将为这个字段创建索引
choices              :    一个用于选择的二维元组,枚举
.....

4.数据表的增删改查

表创建:

from django.db import models<br>
class Publisher(models.Model):
    name = models.CharField(max_length=30, verbose_name="名称")
    address = models.CharField("地址", max_length=50)
    city = models.CharField('城市',max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()
 
    class Meta:
        verbose_name = '出版商'
        verbose_name_plural = verbose_name
 
    def __str__(self):
        return self.name
 
class Author(models.Model):
    name = models.CharField(max_length=30)
    def __str__(self):
        return self.name
 
class AuthorDetail(models.Model):
    sex = models.BooleanField(max_length=1, choices=((0, ''),(1, ''),))
    email = models.EmailField()
    address = models.CharField(max_length=50)
    birthday = models.DateField()
    author = models.OneToOneField(Author)
 
class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()
    price=models.DecimalField(max_digits=5,decimal_places=2,default=10)
    def __str__(self):
        return self.title
View Code

相关文章: