Django学习之----model(1)

学习和使用django已有半年,简单整理下一些model用法(一些基础用法和我工作中常用的较高级的用法)。一是为了分享下心得,二是为了巩固下model的用法。


安装和连接数据库这些就省略不说了。直接送创建model开始。


from django.db import models

class 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")




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值