• django 学习-7 模型数据操作


    1、首先还是创建办一个项目和一个应用

    django.admin.py   startproject    ssj

    cd  ssj

    django.admin.py   startapp    sdj

    那么project和app什么关系呢,一个项目一般包含多个应用,一个应用也可以用在多个项目中。

    2、将新建的应用添加到 settings.py 中的 INSTALLED_APPS中

    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'sdj',
    3、vim sdj/models.py
     
    from django.db  import   models
     
    class    Pl(models.Model):
          name = models.CharField(max_length=30)
          age =  models.IntegerField()
    我们新建了一个Pl类,他继承了models.Model,一个人是有名字和年龄的,这里他用到了两个Field
     
    4、现在同步数据库
    python   manage.py   syncdb

    我们会看到,Django生成了一系列的表,也生成了我们新建的sdj_pl这个表,那么如何使用这个表呢?

    Django提供了丰富的API, 下面演示如何使用它。

    python manage.py   shell

    from   sdj.models   import   Pl

    Pl.objects.create(name='ssj',age='22')

    我们新建了一个用户ssj 那么如何从数据库是查询到它呢?

    Pl.objects.get(name='ssj')

    <Person: Person object>
    我们用了一个 .objects.get() 方法查询出来符合条件的对象,但是大家注意到了没有,查询结果中显示<Person: Person object>,这里并没有显示出与ssj的相关信息,如果用户多了就无法知道查询出来的到底是谁,查询结果是否正确,我们重新修改一下 sdj/models.py
     
    def __unicode__(self):
        return  self.name
     
    这样再去试就会返回名字了
     
    5、一般新建对象的方法有多种
     
        1、Pl.objects.create(name='ssj',age='22')
        2、p = Pl(name='ssj',age='22')
             p.save()
        3、p = Pl(name="TWZ")
       p.age = 23

            p.save()

         4 、 Pl.objects.get_or_create(name="WZT", age=23)

               这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.

    6、

    获取对象有以下方法:

      1. Person.objects.all()

      2. Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存

      3. Person.objects.get(name=name)

        get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter

      4. Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人

      5. Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件

      6. Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人

      7. Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写

      8. Person.objects.filter(name__regex="^abc") # 正则表达式查询

      9. Person.objects.filter(name__iregex="^abc")# 正则表达式不区分大小写

        filter是找出满足条件的,当然也有排除符合某条件的

      10. Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象

      11. Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的

  • 相关阅读:
    爬虫框架scrapy(1)持久化存储的多种方式及多页爬取数据
    爬虫之selenium
    redis相关
    爬虫之数据解析
    爬虫之requests模块2
    爬虫之requests模块
    HTTP和HTTPS协议
    Pymongo使用
    MongoDB
    python网络编程之黏包问题
  • 原文地址:https://www.cnblogs.com/Icanflyssj/p/5130178.html
Copyright © 2020-2023  润新知