django模型的用法

pycharm开发django基本用法

  1. Tools —> run manager.py task 进入命令行模式

  2. runserver 0.0.0.0:8000 启动项目

  3. startapp web22 创建web22这个app

  4. syncdb 同步数据库(1.7以前的版本)

  5. makemigrations

    migrate 同步数据库(1.7以上版本)

  6. shell 进入shell模式(可以测试数据库等连接)

    增:
    models.userinfo.objects.create(username='hanerhui',password='tuyougame',age='25’)
    dic={'username':'xiaoyuelin','password':'tuyougame','age':23}   
    models.userinfo.objects.create(**dic)    导入字典里的内容
    删:
    models.userinfo.objects.filter(username='xiaoyuelin').delete()
    改:
    models.userinfo.objects.filter(username='hanerhui').update(age='26’)
    查:
    models.userinfo.objects.filter(username=‘hanerhui')
    模糊匹配:
    a=models.userinfo.objects.filter(username__contains='han’)
    a[0].username
    返回所有数据:
    models.userinfo.objects.all()

    基本模型

    1. models.py示例

      class Book(models.Model):
              isbn = models.IntegerField()
              name = models.CharField(max_length=100)
              price = models.FloatField()
      
              def __unicode__(self):  #py3 def __str__(self):
                      return self.name
      
      class Author(models.Model):
              name = models.CharField(max_length=30)
              age = models.IntegerField()
      
              def __unicode__(self):
                      return str(self.age)
    2. 在shell模式下调试(python manage.py shell)

      增 insert:

      #方法1:
      from books.models import *
      a=Author(name='hanerhui',age='25') 
      a.save()
      
      #方法2:
      p1 = Author()
      p1. name='zhangsan'
      p1.age =30
      p1.save()
      
      #方法3:
      Author.objects.create(name='zhangsan',age=30)
      
      #方法4:
      这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为TrueFalse, 新建时返回的是True, 已经存在时返回False.
      Author.objects.get_or_create(name='zhangsan',age=30)

      查 select:

      #获取一个记录对象
      Author.objects.get(name="zhangsan")
      --select * from books_author where name='zhangsan'
      
      #获取所有记录对象
      Author.objects.all()
      -- select * from books_author
      
      #输出所有数据
      list=Author.objects.all()
      for var in list:
        respinse1 += var.name + " "
      reponse = reponse1
      return HttpResponse("<p>" + response + "</p>")
      
      #获取满足某些条件的记录对象
      名字包含zhang:
      Author.objects.filter(name__contains="zhang")
      ——相当于 select from ... where name LIKE '%zhang%';
      
      #排序
      Author.objects.order_by("name")
      ——相当于 select from ...  ORDER BY name;
      多项排序:
      Author.objects.order_by("age", "name")
      逆向排序:
      Author.objects.order_by("-name")
      连锁查询:
      Author.objects.filter(age=30).order_by("-name")

      改 update:

      #save方法
      p = Author.objects.get(name='Zhangsan')
      p.name = 'zhangsan'
      p.save()
      
      #update()方法
      Author.objects.filter(name='Zhangsan').update(name='zhangsan')
      
      #对多行同时操作
      Author.objects.all().update(country='USA')

      删 delete:

      #删除对象
      p = Author.objects.get(name="O'Reilly")
      p.delete()
      
      #删除all
      Author.objects.all().delete()

    字段类型与方法

    1. 字段类型与方法

      字段名 方法 说明
      Int IntegerField 表示的范围是 -2147483648-2147483647
      smallint SmallIntegerField 表示的范围是 -32768-32767
      int unsigned PositiveIntegerField 表示的范围是 0-2147483647
      Smallint unsigned PositiveSmallIntegerField 表示的范围是0-32767
      bigint BigIntegerField 表示的范围是 -9223372036854775808-9223372036854775807
      混合精度的小数型数字字段 DecimalField 有两个必需的参数: max_digits=ingt_number:限定数字的最大位数(包含小数位) decimal_places=int_number:存储数字的小数位
        AutoField 根据已有id自增长的整形唯一字段,一般每个model类不需设置该字段,因为django会为每个model自动设置
      Char CharField 需要指定最大宽度 max_length=xxx
      Text TextField 无最大宽度,如果有最大宽度,将在admin页面中的文本输入框中体现。
      图像字段 ImageField 继承了FileField的所有属性和方法。而且还能自动验证上传的对象是否为合法的图像
      Float FloatField 相当于Python中的float
      datetime DateTimeField 相当于Python中的datetime
      Date DateField 相当于Python中datetime.date
      boolean BooleanField 如果没有指定default,默认为None。如果需要能变成null,则应该使用NullBooleanField
      可以空的boolean NullBooleanField 可以空的Boolean
      邮箱 EmailField 默认max_length=254,validators可以检测格式,在form中使用
      文件字段 FileField 这个字段不能设置primary_key和unique选项.在数据库中存储类型是varchar,默认最大长度为100.
      文件路径 FilePathField  
           
      URL字段 URLField 默认max_length=200,有校验机制
      UUID字段 UUIDField 一个char(32)的固定类型,使用时需要导入uuid库。 UUIDField(default=uuid.uuid4)
    2. 字段方法参数

      参数 作用 示例
      null 默认为False,如果指定为True表示该字段可以为空,一般在Char和Text中不应该使用Null,而应该使用blank,null是纯粹是数据库的语法 read_count=IntegerField(null=True)
      blank 默认为False,如果指定为True,则在form表单验证的时候,可以为空。blank是django给表单验证的时候添加的 content=TextField(blank=True)
      default 提供一个默认值 content=TextField(default=’article’)
      editable 是否可以编辑,默认为True,若为False,则不会在admin/界面显示 id=UUIDField(editable=False)
      primary_key 指定是否是主键 id=UUIDField(primary_key=True)
      unique 指定是否唯一 stu_no = CharField(unique=True)
      choice 可选的,限制了该选项的字段值必须是所指定的choice中的一个 见下方示例
      db_column 数据库column名称。默认为本字段的名称  
      db_index 如果为True的话,该字段的数据库索引将会被创建  
      DateField.auto_now 每次修改都会将当前时间更新进去,只有调用Model.save()方法才会调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及Time类才有的 update_time = DateField(auto_now=True) modify_time
      DateField.auto_now_add 第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值 Create_time

一对一,一对多,多对对的关系

一对一(OneToOneField),一对多(外键,Foreignkey),多对多(ManyToManyField)

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    def __unicode__(self):
            return self.name

class Author(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    email = models.EmailField()
    def __unicode__(self):
            return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    def __unicode__(self):
            return self.title

mysql的设置

在app/settings.py 中:
DATABASES = { 
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'douban',		#此处数据库名必须已存在mysql
        'USER': 'root',
        'PASSWORD': 'rootroot',
        'HOST':'127.0.0.1',
        'PORT':'3306',
    }   
}

猜你喜欢

转载自blog.csdn.net/sinat_25545645/article/details/77650152
今日推荐