Django(三)

ORM的概念

1. 什么是ORM?
关系映射对象
# 不但在python中有,在其他语言中也有
2. 特点:
在操作数据库的时候,不用在写原生SQL语句
'''相对而言,执行效率低了'''
3. ORM书写的位置:
在models.py文件中
4. 如何使用?
类名 >>> 表名
对象 >>> 记录
属性 >>> 字段
5. 如何来创建表?
# 创建一张表出来,必须继承models
class User(models.Model):
# 组合索引,联合索引
# id int primary key auto_increment
id = models.IntegerField(primary_key=True)

username, max_length必须写

username = models.CharField(max_length=32) # varchar(32)

password, orm支持自定义数据类型

password = models.CharField(max_length=32) # char()

6. 类写完之后,一定要执行数据库迁移命令,才能真正的创建出来数据表
'''
python36 manage.py makemigrations
python36 manage.py migrate
'''
# 凡是跟数据相关的操作都要执行以上两句话

补充:ORM不能创建数据库,必须提前把库创建完成

字段的增删改查

'''
如果你的表有主键,并且主键名也叫id,那么可以省略不写,自动创建
如果你的主键名不叫id,那么,就需要指定了
'''
# 创建一张表出来,必须继承models
class User(models.Model):
# 组合索引,联合索引
'''
如果你的表有主键,并且主键名也叫id,那么可以省略不写,自动创建
如果你的主键名不叫id,那么,就需要指定了
'''
# id int primary key auto_increment
id = models.IntegerField(primary_key=True)

username, max_length必须写

username = models.CharField(max_length=32) # varchar(32)

password, orm支持自定义数据类型

password = models.CharField(max_length=32) # char()

ORM数据的增删改查

增加数据

sql: insert into t1 ()...

ORM:

第一种方式

res=models.User.objects.create(username='ly', password=123)

'''
返回值是当前插入的数据对象
'''
# print(res.username)

第二种方式:

obj=models.User(username='ly1', password=123)

obj.save() # 这句话才是真正的操作数据

修改:第一种方式

sql:update db1 set username = '', password = '' where id=1 and ...

orm:

models.User.objects.filter(id=1).update(username='LY')

models.User.objects.filter(pk=1).update(username='LY')

'''返回值是影响的行数'''

第二种方式

res = models.User.objects.filter(pk=1).all()[0]

filter里面的条件是and关系

res = models.User.objects.filter(pk=1, username='aaaa11').first() # [0]

res = models.User.objects.filter(pk=1).first() # [0]

res = models.User.objects.filter(username='aaaa').filter(password=123).all() # [0]

'''只要返回值是QuerySet对象,那么,就可以一直点queryset提供的方法'''
# print(res) # <QuerySet [<User: User object>]>
# print(res.username)
# print(res.password)
# res.username = 'aaaa'
# res.save()

删除:delete from user where id = 1

models.User.objects.filter(pk=1).delete()

ORM创建表关系

mysql是关系型数据库

一对一:
'''外键字段建在任何一方都可以,但是,推荐建在使用频率比较高的一张表'''
一对多
'''
外键字段建在多的一方
'''
多对多
'''
外键字段不建在任何一张表,而是,建在第三张表中
'''
eg:

图书表
出版社表
作者表
作者详情表

'''
图书和出版社是一对多,图书是多,出版社是一
图书和作者是多对多的关系
作者和作者详情表是一对一
'''

不常用的数据我们称之为冷数据,

常用的数据我们称之为热数据

ORM创建表关系

1. 先创建这张表的基础字段,

2. 在回头创建外键字段

出版社表

class Book(models.Model):
title = models.CharField(max_length=32)
'''
float
double
decimal(5, 2) 999999.99
'''
# decimal(8, 2)
price = models.DecimalField(max_digits=8, decimal_places=2)
# publish_id = models.ForeignKey(to='Publish', to_field='id')
publish_id = models.ForeignKey(to='Publish') # 如果关联的是id字段,那么可以省略不写
# publish_id = models.ForeignKey(to=Publish) # 如果关联的是id字段,那么可以省略不写

authors = models.ManyToManyField(to='Author')
'''
authors是一个虚拟字段,不会真正的在book表中创建出来这个字段
这个字段是关联第三张表的
'''
class Publish(models.Model):
addr = models.CharField(max_length=32)

作者表

class Author(models.Model):
name = models.CharField(max_length=128)

author_detail = models.OneToOneField(to='AuthorDetail')
# 作者详情表
class AuthorDetail(models.Model):
phone = models.CharField(max_length=32)

posted @ 2022-03-02 19:16  丶祈安  阅读(54)  评论(0)    收藏  举报