首页 > 其他 > 详细

Django-ORM

时间:2019-10-22 21:30:39      阅读:66      评论:0      收藏:0      [点我收藏+]

django-ORM

注意不要轻易注释和删除models里面的字段信息

更改models注意要执行两句话

python manage.py makemigrations 生成迁移文件

python mamage.py migrate 真正把记录同步到数据库上面

多表关系的models建立

图书管理 书-作者-出版社-作者简介

一对一 OneToOneField字段

Book-AuthorDetail

class Author(models.Model):
    name = models.CharField(max_length=32)
    phone = models.BigIntegerField()
    # 一对一字段建在哪张表都可以,但是推荐你建在 查询频率比较高的那张表
    author_detail = models.OneToOneField(to='AuthorDetail')
    # 使用OneToOneField字段创建表的时候会自动给该字段添加_id后缀

class AuthorDetail(models.Model):
    addr = models.CharField(max_length=255)
    age = models.IntegerField()

一对多 ForeignKey

Book-Publish

class Book(models.Model):
    title = models.CharField(max_length=32)
    # 总共八位 小数占两位
    price = models.DecimalField(max_digits=8,decimal_places=2)
    # 书和出版社是一对多的关系  外键字段键在多的一方
    publish_id = models.ForeignKey(to='Publish')  # to指定跟谁是外键关联的,默认关联的是表的主键字段
    # ForeignKey字段  django orm在创建表的时候 会自动给该字段添加_id后缀

class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=255)

多对多 ManyToManyField

Book-Author

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    publish_id = models.ForeignKey(to='Publish')  
    # 书和作者是多对多的关系,外键字段建在任何一方都可以,推荐你建在查询频率比较高的一方
    authors = models.ManyToManyField(to='Author')
    """authors字段仅仅是一个虚拟字段,不会再表中展示出来,仅仅是用来告django orm 书籍表和作者表示多对多的关系
        自动会创建第三张表,多对多关系表
    """
    
class Author(models.Model):
    name = models.CharField(max_length=32)
    phone = models.BigIntegerField()
    author_detail = models.OneToOneField(to='AuthorDetail')

ORM查询数据的三种方式

1.get()

当查询条件不存在的时候,会直接报错 , 如果存在会直接给你返回数据对象本身 不推荐使用

res = models.Userinfo.objects.get(username=username) 

2.filter()

当查询条件不存在的时候,不会报错会返回一个空,返回的是封装过的列表嵌套对象,这个列表支持正数的索引和切片,不支持负数的切片索引,取数据的时候推荐使用它的内置方法(它的底层还是通过切片实现的)

res = models.Userinfo.objects.filter(username=username)
res.first() #取第一个元素

3.all()

拿到表所有数据,返回数据列表嵌套对象

user_queryset = models.Userinfo.objects.all()

print(user_queryset.query)#只有queryset对象可以查看原生的sql语句

添加-修改-删除

添加

user_obj = models.Userinfo.objects.create(username=username,password=password)
# insert into userinfo(username,password) values('admin','666');
1.create方法会有一个返回值  返回值就是当前被创建的数据对象

2.user_obj=user(username="zx")利用对象点方法方式
user_obj.save()  把当前对象保存到数据库中

修改

models.Author.objects.filter(pk=author_id).update(name=name,phone=phone)
#pk为查询主键,更改查询出来的所有数据对象

也可以获取对象.属性修改.save()    不推荐,所有数据全部重新写入,效率低

删除

models.Author.objects.filter(pk=author_id).delete()
#批量删除

参数渲染的方式

字典传值

today = datetime.datetime.now()
content = {'date':today}
return render(request,'login.html',content)

{{date}}

函数局部变量全部传递local()

user_queryset = models.Userinfo.objects.all()
return render(request,'userlist.html',locals())

{% for re in res %}
{% endfor %}

Django-ORM

原文:https://www.cnblogs.com/zx125/p/11722314.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!