ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

初识ORM

2021-12-07 19:31:44  阅读:156  来源: 互联网

标签:jason name objects models ORM 初识 orm User


django orm简介

# 什么是ORM?
ORM:对象关系映射
# 为什么要用ORM?
能够让不会写SQL语句的python程序员
   使用面向对象的语法即可简单快捷的操作MySQL,极大地提升开发效率
'''但是ORM有时候自动生成的SQL效率可能会很低'''

类 表
对象 一行行记录
对象点属性     记录某个字段对应的值
# 如何使用ORM?
在django应用文件夹下的models.py中操作
 
"""orm无法创建库 需要自己提前创建好"""

orm创建表

"""
强调:只要在models.py中改动了与数据库相关的代码 就必须要重新执行迁移命令
"""

# 1.先在models.py中书写类相关的代码
# 2.执行数据库迁移命令
python3 manage.py makemigrations # 将改动记到小本本上(migrations)
   python3 manage.py migrate  # 真正操作数据库
   """pycharm快捷提示(tools>>>run manage.py task)"""

补充

1.主键字段orm会自动创建 只不过名字固定为id
2.CharField字段类型必须要有max_length参数

字段增删改查

# 当表中已经有数据存在的情况下如果添加新的字段那么需要设置null或者default
password = models.IntegerField(verbose_name='密码',null=True)  # pwd int comment '密码'
age = models.IntegerField('年龄',default=18)

数据增删改查

# 查
models.User.objects.all()  # 查询user表中所有的数据
# select * from user;
<QuerySet [<User: jason>, <User: tony>, <User: kevin>]>
models.User.objects.filter(name='jason')  # 查询name=jason的数据
# select * from user where name='jason'
   <QuerySet [<User: jason>]>
models.User.objects.filter(name='jason',password=123)
# select * from user where name='jason' and password=123
   <QuerySet [<User: jason>]>
"""
QuerySet我们可以简单的理解为是列表套一个个数据对象
"""

# 增
models.User.objects.create(name='jerry',password=567)
# insert into user(name,password) values('jerry',567)
   上述orm返回值为当前被创建出来的数据对象本身
   
obj = models.User(name='tom',password=111)  # 类产生对象
obj.name ='oscar'
obj.save()  # 对象调用save方法保存到数据库

# 改
edit_obj = models.User.objects.filter(id=3)[0]
edit_obj.name = 'kevinSB'
edit_obj.save()

models.User.objects.filter(name='jason').update(name='jasonNB')
# update user set name='jasonNB' where name='jason';
 
# 删
models.User.objects.filter(id=5).delete()
# delete from user where id=5;

 

orm外键创建

一对多外键关系  
"""在orm中 外键字段建在多的一方"""
多对多外键关系
"""在orm中 可以直接写在查询频率较高的表中(自动创建第三张表)"""
一对一外键关系
"""在orm中 直接写在查询频率较高的表中"""
   
# 一对多
   publish = models.ForeignKey(to='Publish')
# 多对多
   authors = models.ManyToManyField(to='Author')  # 自动创建书籍和作者的第三张关系表
# 一对一
   author_detail = models.OneToOneField(to='AuthorDetail')
   
"""
ForeignKey OneToOneField 会自动给字段加_id后缀
"""
class Book(models.Model):
   title = models.CharField(max_length=32)
   price = models.DecimalField(max_digits=8,decimal_places=2)
   # 一对多
   publish = models.ForeignKey(to='Publish')
   # 多对多
   authors = models.ManyToManyField(to='Author')  # 自动创建书籍和作者的第三张关系表

class Publish(models.Model):
   title = models.CharField(max_length=32)

class Author(models.Model):
   name = models.CharField(max_length=32)
   # 一对一
   author_detail = models.OneToOneField(to='AuthorDetail')

class AuthorDetail(models.Model):
   addr = models.CharField(max_length=32)
   phone = models.BigIntegerField()

 

标签:jason,name,objects,models,ORM,初识,orm,User
来源: https://www.cnblogs.com/long4275/p/15657883.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有