zoukankan      html  css  js  c++  java
  • ORM操作

    model如下

    class Publisher(models.Model):
        name = models.CharField(max_length=30)
        address = models.CharField(max_length=50)
        website = models.URLField()
    
    
    class Author(models.Model):
        name = models.CharField(max_length=30)
    
    
    class AuthorDetail(models.Model):
        GENDER_CHOICE = (
            (0, ""),
            (1, ""),
        )
        sex = models.BooleanField(max_length=1, choices=GENDER_CHOICE)
        email = models.EmailField()
        birthday = models.DateField()
        author = models.OneToOneField(Author, on_delete=models.CASCADE)
    
    
    class Book(models.Model):
        title = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
        publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
        publication_date = models.DateField()
    首先进入shell界面,python manage.py shell
     
    1. 增加,有两种方法:即create和save方法
     
    1)增加一个作者记录
    >>> from hello.models import *
    >>> Author.objects.create(name="lilei")
    >>> AuthorDetail.objects.create(sex=False,email='13@qq.com', birthday="1989-08-20", author_id=1)
    注意最后的author_id
    =1, 其中author_id是authordetail表中自动生成的字段名,1的值是通过在Author表中插入作者记录后自动生成的id号。
    >>> Author.objects.all().values("id", 'name') <QuerySet [{'id': 1, 'name': 'lilei'}, {'id': 2, 'name': 'jack'}]>
    外键的插入方式有两种
    1)通过id的方式,这里就是通过id方式;
    2)通过对象的方式,在下面的例子中会说明
     
     
    2)增加一个出版社
    pub1 = Publisher()
    pub1.name = '电子工业出版社'
    pub1.address = '华阳'
    pub1.save()
     
    3)增加一个书籍,这里可以分两步做
    首先创建Book表中非多对对的属性
    Book.objects.create(title='小王子', publisher=pub1, publication_date='2009-05-06')  #对象的方式
    或者
    Book.objects.create(title="小王子", publisher_id=2, publication_date="2009-08-12")  #id的方式
     
    还要增加作者的字段,作者和书籍是多对多关系
    book1=Book.objects.get(id=1)   #首先根据书籍id号得到书籍的对象
    author1 = Author.objects.get(id=1)  #再根据作者id号得到作者的对象
    book1.authors.add(author1)  
     
    小结:
    1)objects是model默认管理器,它提供一系列方法来管理数据,比如create()方法
    2)插入主外键关系的时候,可以用对象的方式,也可直接用关联id的方式
    3)插入多对多关系的时候要分步操作
    4)save()是实例化对象的方法
     
     
     
    2. 修改,可用update()和save()
    实例
    1)修改id为1的作者的名字为jack,性别为女
    author=Author.objects.get(id=1)
    author.name='jack'
    author.save()
     
    2)修改名为"电子工业出版社"的出版社地址为中和,城市为成都
    Publisher.objects.filter(id=1).update(city='成都', address='中和') 
     
    注意:
    update是QuerySet对象的方法,而filter()的返回类型为QuerySet
     
     
     
    3. 查询
    1)查询所有出版社信息:Publisher.objects.all()
    可用type(Publlisher.objects.all())查看返回类型
     
    注意:
    1)ORM中的查询是惰性查询,比如Publisher.objects.all()只是返回了一个QuerySet(查询结果集对象),并不会马上执行sql,而是调用QuerySet的时候才执行
    简单说就是print(Publisher.objects.all())会执行sql,显示出查询结果;不加print()就不执行
    2)在django shell中不是惰性查询
     
     
     
    4. 删除, delete()
    1)删除id为1的书籍信息, 会删除所有表中的书籍信息
    Book.objects.filter(id=1).delete()
     
    2)删除city为成都的出版社
    Publisher.objects.filter(city='成都').delete()
     
    注意:
    1)django中的删除默认是级联删除
    2)delete方法也是 QuerySet对象的方法
     
     
     
     
  • 相关阅读:
    对用户控件(ascx)属性(property)赋值
    The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
    图片淡入淡出切换效果
    在用户控件(ASCX)创建用户控件(ASCX)
    Login failed for user 'xxx'
    一些较好的书
    儿子购买的书
    怀念以前做网管的日子
    Linux下selinux简单梳理
    Rsync同步时删除多余文件 [附:删除大量文件方法的效率对比]
  • 原文地址:https://www.cnblogs.com/regit/p/12612322.html
Copyright © 2011-2022 走看看