Django之ORM
什么是ORM
ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
在操作数据库时,不用再写SQL语句就能操作数据库。
使用ORM创建表的操作
在应用的models.py里操作
# 创建表
class User(models.Model):
# 创建字段
# id = models.AutoField(primary_key=True, verbose_name='主键')
username = models.CharField(primary_key=True, max_length=32, verbose_name='用户名')
password = models.IntegerField(verbose_name='密码')
# gender = models.CharField(max_length=32, verbose_name='性别')
# hobby = models.CharField(max_length=32, default='red', verbose_name='爱好')
# age = models.IntegerField(null=True,verbose_name='年龄')
PS: 如果你的主键名时id时,可以不写,django会自动帮你创建一个主键名为id的字段,并且自增,字符串字段的max_length必须写,否则会报错,verbose_name是该字段的注释。
代码写好之后,在命令行中输入 python3 manage.py makemigrations 这是创建迁移记录
python3 manage.py migrate 这一步才是创建表
也可以在 tools =》 RUN manage.py TASK中输入命令,在这里面前缀可以不加,直接写后面的代码即可,pycharm还会有提示功能
使用ORM对表的增删改查
和创建表一样,直接再models.py中操作,增加字段就使用上面的操作,修改表直接修改表里的代码即可,删除将代码注释掉即可
注意!对数据库进行操作之后,想要保存修改后的表必须在命令行中输入python3 manage.py makemigrations和 python3 manage.py migrate
只有输入了这两个命令,表的操作才会被修改。
使用ORM对数据的增删改查
增
# 第一种方式 # models.表名.object.create(字段名1=数据1,字段名2=数据2) res=models.User.objects.create(username='jack', password=123) ''' 返回值是当前插入的数据对象 ''' # 第二种方式 res=models.USER(username='jack',password=123) res.save()
查
# 查找所有数据,返回一个列表,列表里可以看作是一个个对象,可以使用索引取得对象 res=models.User.object.filter().all.() res=models.User.object.filter() # 查找字段名username='jack'的数据列表 res=models.User.object.filter(username='jack') # 获得字段名为id=1的数据对象 #方式1 obj=models.User.object.filter(id=1).first() #方式2 obj=models.User.object.filter(id=1)[0]
改
# 查找数据库中字段名username为jack的数据,将该行的数据改成username改成jerry,password改成123 res = models.User.objects.filter(username='jack').update(username=jerry, password=123) #该返回值是数据库影响的行数
删
# 查找数据库中字段名username为jack的数据,将改行数据删除 models.User.objects.filter(username=jack).delete()
ORM创建表关系
一对多(在多的表中书写)
# 关联字段名 = models.ForeignKey(to='被关联表名',to='被关联表明的关联字段')
publish_id = models.ForeignKey(to='Publish') # 如果关联的是id字段,那么可以省略不写
一对一(在任意一张表中书写即可)
# 关联字段名 = models.OneToOneField(to='被关联字段名') author_detail = models.OneToOneField(to='AuthorDetail')
多对多
# 关联字段名 = models.ManyToManyField(to='被关联字段名') authors = models.ManyToManyField(to='Author')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)