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)

__EOF__

本文作者祈安
本文链接https://www.cnblogs.com/jyc666/p/15956672.html
关于博主:没有收拾残局的能力,就别放纵善变的情绪
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   丶祈安  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示