首先推荐两篇文章: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