本文共 1955 字,大约阅读时间需要 6 分钟。
学习和使用django已有半年,简单整理下一些model用法(一些基础用法和我工作中常用的较高级的用法)。一是为了分享下心得,二是为了巩固下model的用法。
安装和连接数据库这些就省略不说了。直接送创建model开始。
from django.db import modelsclass Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
class Book(models.Model): artist = models.ForeignKey(Person) name = models.CharField(max_length=100) release_date = models.DateField() num_stars = models.IntegerField()每一个model对应数据库中的一张表,以上是最基本的形式(继承models.Model,你也可以继承其他models类,比如你可以继承TimeStampedModel,这样创建的表中会有created和modified字段,自动记录每条记录的创建时间和修改时间)。
运行python manage.py syncdb后会在你的数据库中创建两张表,person表中有两个字段(字符型,且最大长度为30)first_name和last_name。models的一些常用field:
ForeignKey:外键(一对多)
OneToOneField:一对一
IntegerField:数字
PositiveIntegerField:正整数
DateTimeField: 日期类型
BooleanField: 布尔
.....
创建好了数据库,我们就可以在view层进行增删改查了
查
(1)person = Person.objects.all() #查看person表中所有数据
(2) person = Person.objects.filter(first_name='guo') #查看person表中first_name='guo'的数据
(3)person = Person.objects.get(first_name='guo') #只返回person表中first_name='guo'的一条数据,请慎用get(),因为如果返回的对象有多个,会报MultipleObjectsReturned错,如果为空,会报DoesNotExist错误。
(4)person = Person.objects.all().order_by("-first_name") #表示按first_name倒叙排列
(5)person = Person.objects.all()[1] #QuerySet可以像列表一样用索引取值,但不支持负数。
(6)Person.objects.value_list('first_name', flat=True) #只显示first_name, 扁平化输出
结果:['guo', '', ....]
增:
有以下两种方式
(1)person = Person(first_name='guo', last_name="hua")
person.save() #此时才将数据保存到数据库中
(2)你也可以一步直接存在数据库
person = Person.objects.create(first_name='guo', last_name="hua")
删
(1)person = Person.objects.filter(first_name='guo', last_name="hua")
person.delete()
(2) person = Person.objects.filter(first_name='guo', last_name="hua").delete()
#清空表中所有数据可以这样 Person.objects.all().delete()
改
(1)person = Person.objects.filter(first_name='guo', last_name="hua")
person.first_name = "wang"
person.save()
(2) person = Person.objects.filter(first_name='guo', last_name="hua").update(first_name = "wang")
转载地址:http://oavws.baihongyu.com/