model(数据库模型) ORM

表与表的关系(两张表之间的):
一对多 :先建两个表:(学生和属于的部门的关系)

Django之ORM的增删改查
Django之ORM的增删改查
那么dep_id来确定某个人属于哪个部门的。
每个人可以为多个部门的,李华可以在办公室和学生会都有工作,这就是一对多。

多对多:先建两个表:(作者和图书的关系)
Django之ORM的增删改查
Django之ORM的增删改查

但是一本书不一定只有一个作者,两张表已经不能满足关系了,我们这时候需要新建一张表表示关系。
Django之ORM的增删改查
在一个外键不好用的时候再建一个第三张表来代表关系,第一行的意思是python课本是志超写的。第二行是python课本是小黄写的。

一对一:拿两张表:(和第一个一样)
Django之ORM的增删改查
Django之ORM的增删改查
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200222155629942.png
如果一个人只能进一个部门,那就是一对一。
那么我们要怎么实现呢?
我们需要在dep_id加一个惟一约束,一对一就出来了。

ORM----object relation mapping(对象关系映射表)
django默认支持sqlite,mysql,oracle,postgresql数据库。
sqlite的引擎名称:django.db.backends.sqlite3
mysql的引擎名称:django.db.backends.mysql

mysql的驱动程序,py2的话推荐用MySQLdb,py3推荐用PyMySQL。

(只用mysql的萌新只能拿mysql来做了,/害羞)
打开setting发现里面有部分代码是这样的:
Django之ORM的增删改查

这里django默认的数据库是sqlites。

我们需要改一下把:
Django之ORM的增删改查
这一个改成:

Django之ORM的增删改查
把splites的数据库的数据改成mysql的:
Django之ORM的增删改查
在models里面写入:
Django之ORM的增删改查

最后我在数据迁移的时候报错了:
Django之ORM的增删改查

然后我根据地址找到相应的文件,发现了这个:
Django之ORM的增删改查
英语巨渣,随手备了个翻译软件。
注释掉这两行,然后又报错了:
Django之ORM的增删改查
继续改:
Django之ORM的增删改查
结果:
Django之ORM的增删改查

单表操作:
1.表记录的添加:
方式1:
Book()
b=Book(name=“pathon基础”,price=99,author=“an”,pub_date=“2019-9-16”)
b.save()
方式2:
Book.objects.create()
Book.objects.create(name=“开心”,price=16,autthor=“an”,pub_date=“2016-12-12”)

2.表记录的修改:
方式1:
b=Book.objects.get(author=“ook”)
b.price=120
b.save()
方式2:
update是对所以的字段进行修改
Book.objects.filter(author=“an”).update(price=123)

3.表记录的删除:
Book.objects.filter(author=“123”).delete

4.表记录的查询:
book_list=Book.objects.all()
print(book_list)#有下标的

book_list=Book.objects.filter(id=0)

book_list=Book.objects.all()[::2]

book_list=Book.objects.first()

book_list=Book.objects…last()

book_list=Book.objects.get(id=1)

bt=Book.objects.filter(author=“123”).values(“name”)

bt=Book.objects.filter(author=“123”).values_last("name,“peice”)

book_list=Book.objects.exclude(author=“an”).values("name,“price”)

book_list=Book.objects.all().values(“name”).distinct()
book_count=Book.objects.all().values(“name”).distinct().count()

模糊查询:__(双下划线)
__exact 精确等于 like ‘aaa’
__iexact 精确等于 忽略大小写 ilike ‘aaa’
__contains 包含 like ‘%aaa%’
__icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__gt 大于
__gte 大于等于
__lt 小于
__lte 小于等于
__in 存在于一个list范围内
__startswith 以…开头
__istartswith 以…开头 忽略大小写
__endswith 以…结尾
__iendswith 以…结尾,忽略大小写
__range 在…范围内
__year 日期字段的年份
__month 日期字段的月份
__day 日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2019-10-07
  • 2022-01-10
  • 2021-11-29
  • 2022-01-10
  • 2021-10-26
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
  • 2021-12-01
  • 2021-11-27
  • 2021-05-23
相关资源
相似解决方案