django orm

django orm

一、django orm简介

  orm不会自动创建库,只能自动创建表,所以数据库必须要提前创建好

1、orm对象关系

      类    -->   表

    对象  -->  记录

    属性  --> 字段值

 

2、orm作用

  更为简单的操作数据。能够让一个不会数据库操作的小白也能够通过python面向对象语法 句点符来简单快捷的操作数据

 

3、如何写模型类

  首先需要先去对应的应用下的models.py中书写模型类

  models.py文件中需要写的东西,例:

class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    password = models.IntegerField()

class Book(models.Model):
    # 当你没有指定主键的时候, django orm会自动帮你创建一个名为id的主键字段
    # 一旦检测到你自己创建了主键字段,那么就不会再帮你创建
    name = models.CharField(max_length=32)
    password = models.IntegerField()

  写完模型类之后,要记得执行数据库迁移(同步)命令,同步表到数据库(可以在pycharm下的Terminal窗口下执行)。

python manager.py makemigrations    # 仅仅是将你对数据库的改动记录到某个文本上(migrations文件夹)
python manager.py migrate    # 将改动真正的同步到数据库中
# 上面两个命令永远都是成对出现的,只要执行了第一条,就一定要执行第二条
# 只要动了models.py中跟数据库相关的代码,你就必须要重新执行上面的两条命令来保证数据库与models.py保持一致

django orm

  执行完成之后,数据库中会自动生成数据表

 

 

二、使用orm对字段、数据的进行增删查改

1、字段的增删改

增:两种方式

  第一种:给该字段设置默认值

# 新增一个邮箱字段,设置默认值
email = models.EmailField(default='123@qq.com')

  第二种:让该字段允许为空

# 新增一个爱好字段,允许为空
hobbies = models.CharField(null=True, max_length=255)

改:

  直接修改models.py中的字段代码,然后执行数据库迁移命令即可

删(了解):

  直接修改models.py中的字段代码,将字段属性注释掉或删掉,执行数据库迁移命令就会将对应的字段以及数据信息全部删除(慎用)

 

2、数据的增删改查

增:两种方式

  第一种方式(推荐):create()方法

# 方式一:直接朝数据库中添加数据
# 直接朝数据库中添加数据
user_obj = models.User.objects.create(name=username, password=password)
print(user_obj.password, user_obj.name)

  第二种方式:对象的绑定方法

# 1 先生成一个user对象
user_obj = models.User(name=username, password=password)
# 2 调用对象的绑定方法
user_obj.save()

查:

  条件查询:filter()方法,括号内传入参数

res = models.User.objects.filter(name=username)    # 原生sql语句:select * from user where username='tom'
# filter()该方法返回的结果可以看成是一个列表套对象的形式
# QuerySet支持索引取值但是不支持负数,并且 也不推荐直接索引取值,推荐使用封装好的方法first()
user_obj = res.first()
# filter方法条件不存在的时候,不会报错,返回的是一个空列表

  取所有:两种方法

    第一种方式:filter()方法,括号内不传参数

users_obj = models.User.objects.filter()
print(users_obj)  # <QuerySet [<User: jack>, <User: tom>, <User: roll>, <User: back>]>

    第二种方式:all()方法

users_obj = models.User.objects.all()
print(users_obj)  # <QuerySet [<User: jack>, <User: tom>, <User: roll>, <User: back>]>

改:两种方式

  第一种方式(推荐):update方法

models.User.objects.filter(id=edit_id).update(name=username, password=password)

  第二种方式(了解):调用对象的绑定方法

# 1 先获取数据对象
edit_obj = models.User.objects.filter(id=edit_id).first()
# 2 再修改对象属性
edit_obj.name = username
edit_obj.password = password
# 3 调用对象的绑定方法保存
edit_obj.save()

  写个例子:

django orm
# 1、先获取用户想要修改的数据id
edit_id = request.GET.get('edit_id')

if request.method == 'POST':
    # 获取用户修改后用户名和密码
    username = request.POST.get('username')
    password = request.POST.get('password')
    # 修改数据(推荐使用) 方式一:            批量更新
    models.User.objects.filter(id=edit_id).update(name=username, password=password)
    # 修改数据(了解) 方式二:
    # 1 先获取数据对象
    # edit_obj = models.User.objects.filter(id=edit_id).first()
    # 2 再修改对象属性
    # edit_obj.name = username
    # edit_obj.password = password
    # 3 调用对象的绑定方法保存
    # edit_obj.save()
    return redirect('/home')

# 2、根据id获取数据对象,并且展示到html页面上
edit_obj = models.User.objects.filter(id=edit_id).first()
return render(request, 'edit_user.html', {'edit_obj': edit_obj})
update方法

删:

  delete()方法

models.User.objects.filter(id=delete_id).delete()    # 将filter过滤出来的数据全部删除
上一篇:idea控制台乱码(tomcat日志乱码)的解决办法


下一篇:[LeetCode] 72. Edit Distance (编辑距离)