django_模型层



模型层(ORM语法):是直接跟数据库打交道的

一.模型层

模型层:models.py 
模型层(ORM语法):是直接跟数据库打交道的   ORM语法到本质上还是要转化成SQL语法的

二.修改mysql

因为
django自带的sqlite3数据库 功能很少 并且针对日期类型不精确
所以我们要使用mysql操作
1.先修改配置文件信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 修改为mysql
        'NAME': 'qaq',                 # 修改为你库的名字
        'HOST': '127.0.0.1',        
        'PORT': 3306,
        'USER': 'root',             
        'PASSWORD': '自己密码'
2.在任意一个__init__内添加 
        import pymysql       
pymysql.install_as_MySQLdb()

三.django操作数据库

1.创建数据表
from django.db import models   # 必不可少
class User(models.Model):
    uid = models.AutoField(primary_key=True) # 主键字段
    name = models.CharField(max_length=32)  # 字符串字段
    pwd = models.IntegerField()              # 数字字段
    op_time = models.DateField(auto_now=True) # 时间字段
    """
    auto_now 每次修改数据自动更新当前时间
    auto_now_add 数据被创建出来后记录时间
    """
# 可以不用写主键 django自动生成库的主键

# 数据库迁移命令
python3 manage.py makemigrations
python3 manage.py migrate
'将类的操作映射到表中'

# 数据库的反向迁移命令
python3 manage.py inspectdb
'将表的才做映射到类中'

四.不使用ORM操作数据库

1.stets.py中进行操作测试
import os


if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoProject_dy_54.settings")
    import django
    django.setup()
    在django中  manage.py复制他内的前两行代码
2.pycharm 中
problems 中进行操作

五.操作数据库

    from app01 import models

    models.User.objects.create(name='jason',age=18)
    models.User.objects.create(name='tony',age=28)
    models.User.objects.create(name='kevin',age=28)
    models.User.objects.create(name='kerry',age=38)
    models.User.objects.create(name='jack',age=38)
    models.User.objects.create(name='tom',age=28)
    models.User.objects.create(name='oscar',age=18)

    res = models.User.objects.all()                   # 查询所有的数据                          QuerySet 可以看成是列表套对象
    res = models.User.objects.filter()                # 括号内填写筛选条件 不写相当于all()      QuerySet 可以看成是列表套对象
    res = models.User.objects.filter(pk=1)            # 想通过主键筛选数据 可以直接写pk 会自动定位到当前表的主键字段 无需你自己查看具体字段名称
    res = models.User.objects.filter(pk=1)[0]         # 直接获取数据对象               QuerySet支持索引取值 但是django不推荐使用 因为索引不存在会直接报错
    res = models.User.objects.filter(pk=1).first()            # 获取结果集中第一个对象     推荐使用封装的方法 不会出现索引超出范围报错的情况
    res = models.User.objects.filter(pk=1, name='kevin').first()                                # 括号内支持填写多个筛选条件 默认是and关系
    res = models.User.objects.filter().filter().filter().filter().filter()      # 只要是QuerySet对象就可以继续点对象方法(类似于jQuery链式操作)
    res = models.User.objects.filter().last()                                 # 获取结果集中最后一个对象

    res = models.User.objects.all().values('name','age')          # QuerySet 可以看成是列表套字典
    res = models.User.objects.values('name','age')                # QuerySet 可以看成是列表套字典  指定字段 all不写也表示从所有数据中操作
    res = models.User.objects.filter(pk=2).values('name')         # 可以看成是对结果集进行字段的筛选
    res = models.User.objects.all().values_list('name', 'age')    # QuerySet 可以看成是列表套元组

    res = models.User.objects.all().distinct()                    # 数据对象中如果包含主键 不可能去重
    res = models.User.objects.values('name').distinct()

    res = models.User.objects.order_by('age')                      # 默认是升序
    res = models.User.objects.order_by('-age')                     # 该为降序
    res = models.User.objects.order_by('age', 'pk')                # 也支持多个字段依次排序

    res = models.User.objects.exclude(name='jason')                # 取反操作

    res = models.User.objects.reverse()                            # 不起作用
    res1 = models.User.objects.order_by('age').reverse()           # 只有在order_by排序之后才可以
    print(res1)
    res = models.User.objects.order_by('age')

    res = models.User.objects.count()                              # 统计结果集的个数


    res = models.User.objects.exists()
    res = models.User.objects.filter(name='jasonNB').exists()      # 判断结果集中是否有数据 有返回True 没有返回False

    res = models.User.objects.get(pk=1)                            # 直接获取数据对象 但是不推荐使用
    res = models.User.objects.get(pk=100)                          # 条件不存在 直接报错
    res = models.User.objects.filter(pk=100)                       # 条件不存在 返回空
    print(res)
posted @ 2022-05-17 01:01  笑舞狂歌  阅读(37)  评论(0编辑  收藏  举报