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)