Django–ORM
它可以不懂sql语句的小白也能操作数据库,但是有时sql语句效率偏低,需要自己写sql语句
类 表
对象 记录
对象属性 记录某个字段对应的值
1.配置models.py
注释的是sql原型语句,我们这创建一个数据库
class User(models.Model):
#id int primary_key auto_increment
id=models.AutoField(primary_key=True)
#username varchar(32)
username=models.CharField(max_length=32)
#charfield必须指定max_length参数
#password int
password=models.IntegerField()
2.在该项目命令窗口下输入迁移命令
python manage.py makemigrations
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hmsG6q4u-1626359082404)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709084205914.png)]
发现migrations下多了个文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ggQPv0Zr-1626359082409)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709084251217.png)]
打开该文件发现,这个文件是做记录的,当你在命令框下面输入
python manage.py migrate
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WC0BUuJp-1626359082411)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709084750534.png)]
它会都会真正创建数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ikFaaQao-1626359082413)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709090204725.png)]
注意:只要你改了models.py中数据相关的代码,就必须重新执行上述命令
字段的增删改查
(1)字段的增加
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WXVignb-1626359082417)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709101525130.png)]
1.可以在终端内直接输入默认值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xaFWJHRT-1626359082418)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709101633816.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFQmMYZR-1626359082421)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709101838869.png)]
2.该字段可以为空
info=models.CharField(max_length=32,verbose_name=‘个人简介’,null=True)
3.直接给字段设置默认值
hobby=modles.CharField(max_length=32,verbose_name=‘爱好’,default=‘study’)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YxMpIMT6-1626359082425)(C:\Users\one\AppData\Roaming\Typora\typora-user-images\image-20210709102151245.png)]
(2)字段的修改
直接修改代码然后执行数据库迁移命令即可
(3)字段的删除
在实际开发中,操作models.py一定要细心,千万不要随便注释一些字段,执行前最好检查下
直接注释掉需要删除的字段然后再执行数据库迁移命令即可
数据的增删改查
(1)增
#直接获取用户数据存入数据库
from app01 import models
res=models.User.objects.create(username=username,password=password)
#返回值就是当前被创建的对象本身
方法二:
from app01 import models
user_obj=models.User(username=username,password=password)
user_obj.save()#保存数据
(2)查
filter()
res=models.UserInfo.objects.filter(**kwargs)
返回的结果是一个querySet对象,你可以把它看作一个列表数据对象[数据1对象,数据2对象…。]
支持索引和切片操作,但是不支持负数
.first()方法
filter括号内可以写多个参数,查询的时候默认是and关系
去数据库里查询数据
from app01 import models
res = models.User.objects.filter(username=username)
#相当于 select * from user where username='username'
#<QuerSet [<User :User object>]> [数据对象1,数据对象2..。]
user_obj=res[0]
print(user_obj)
print(user_obj.username)
print(user_obj.password)
er object>]> [数据对象1,数据对象2…。] user_obj=res[0] print(user_obj) print(user_obj.username) print(user_obj.password)
|