Django-04-models

ORM模型

  • objectRelationMap:把面向对象的思想转换成关系型数据库
  • 类去对应表格
  • 类中的属性对应表中的字段
  • 在应用中的models.py文件中定义class
  • 所有需要使用的ORM的class都必须时models.Model的子类
  • class中的所有属性对应表格中的字段
  • 字段的类型都必须使用models.xxx不能使用python中的

django链接数据库

  • 自带默认清亮型数据库Sqllite3
  • 建议开发时使用Sqllite3,部署时使用mysql等数据库
#django链接mysql数据库
#1. 使用其他数据库时,只要修改setting中的下面代码即可
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'PASSWORD''数据库密码',
        'HOST''127.0.0.1',
        'PORT''3306',
    }
}
#2. 需要在项目文件夹下的__init__文件中导入pymusql包
import pymysql
pymysql.install_as_MySQLdb()

models类的使用

  • 定义和数据库表映射的类

    • 在app中的models.py文件中定义class
    • 所有需要使用ORM的class都必须是models.Model的子类
    • class中的所有属性对应表格中的字段
    • 字段的类型都必须使用models.xxx,不能使用python中的类型
  • 字段的常用参数

    • max.length:规定数值(表格中的每一项,如姓名长度)的最大长度
    • blank:是否允许字段为空,默认是False不允许
    • nall:在DB中控制是否保存为null,默认为False
    • default:默认值
    • unique:唯一
    • verbose_name:假名
#新建的表格
class mulu(models.Model):
    mingcheng = models.CharField(max_length=10)
    xinghao = models.CharField(max_length=30)
    changjia = models.CharField(max_length=10)
    shuliang = models.IntegerField()
    #添加后可以使查询表单目录时候,更有可读性
    def __str__(self):
        return self.mingcheng
  • 数据库的迁移

    1. 在命令行中,生成数据迁移的语句(生成sql语句)
    2. 在命令行中,输入数据迁移的指令,如果迁移中出现没有变化或者报错,可以尝试强制迁移
    3. 对于默认数据库,为了避免出现混乱,如果数据库中没有数据,每次迁移前可以将自带的sqlite3数据库和app下的migrations文件夹删除
    4. 正式迁移,前几步只是预备步骤,此步骤为真正的迁移
#正常生成数据迁移指令
python manage.py makemigrations
#正常迁移指令
python manage.py migrate
#强制生成数据迁移指令
python manage.py makemigrations 应用名
#强制迁移指令
python manage.py migrate 应用名
#正式迁移
python manage.py migrate

命令行(shell)操作

  1. 启动虚拟环境下的python命令行:python manage.py shell。注意:对ORM的操作分为静态函数和动态函数,静态函数是指所有类实例公用的属性
  2. 在命令行中导入,建好的表格类:from 应用名.models import 类名
  3. 使用object属性操作数据库.object是模型中实际和数据库进行交互的
  4. 查询命令
    • 类名.objects.all() 查询数据库表中的所有内容,返回的结果是一个Query类型
    • 类名.objects.filter(条件)
  5. 对数据库结构的改变,需要重启shell才能生效,如改变models.py文件中的数据库结构
>>> from gongneng.models import mulu
#实例化表单
>>> m = mulu()
#插入值
>>> m.mingcheng = "电磁阀"
>>> m.xinghao = "AD66"
>>> m.shuliang = 5
#保存实例
>>> m.save()
#实例化目录列表
>>> l = mulu.objects.all()
>>> l
[<mulu: mulu object>]
#查询数据库列表,第一项
>>> l[0]
<mulu: mulu object>
#查询数据库列表,第一项的,各个属性
>>> l[0].mingcheng
'电磁阀'
>>> l[0].xinghao
'AD66'
>>> l[0].changjia
''
>>> l[0].shuliang
5
#查询shuliang属性等于5的项
>>> c = mulu.objects.filter(shuliang=5)
>>> c
[<mulu: mulu object>]
  1. 常见的查找方法
    • 常用查找格式:属性名__(加入下面的内容) = 值
      • gt:大于
      • gte:大于等于
      • lt:小于
      • lte:小于等于
      • range:范围
      • year:年份
      • isnull:是否为空
    • 模糊查找:属性名__(加入下面的内容) = 值
      • exact:精确等于
      • iexact:不区分大小写
      • contains:包含
      • startwith:已XX开头
      • endwith:已XX结尾
>>> c = mulu.objects.filter(shuliang__gte=5)
>>> c
[<mulu: mulu object>]
>>> c = mulu.objects.filter(xinghao__contains="AD")
>>> c
[<mulu: mulu object>]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值