zoukankan      html  css  js  c++  java
  • django模型系统一

    django模型系统一


    1.数据库的连接配置

    • django连接mysql的配置流程
      • 安装pymysql       **  pip install pymysql
      • 修改配置
        • 修改setting的配置文件
           1 DATABASES = {
           2     'default': {
           3         'ENGINE': 'django.db.backends.mysql',
           4         'NAME': 'crm',
           5         'USER': 'root',
           6         'PASSWORD': 'qwe123',
           7         'HOST': '127.0.0.1',
           8         'PORT': '3306',
           9     }
          10 }
        • 在setting的同级目录下的__init__.py文件中写上1 import pymysql 2 pymysql.install_as_MySQLdb()
      • 设置时区:
        • 设置setting里面的TIME_ZONE = 'Asia/Shanghai'

    2.django的ORM系统

    • ORM: 对象关系映射(Object Relational Mapping),是一种程序技术,用于实现面相对象编程语言里的不同类型系统的数据之间的转换。用面相对象的方式描述数据库,操作数据库,用不用编写sql语句就能对数据库进行操作。
    • django模型的映射关系:
      • 模型类 → 数据表
      • 类属性 → 表字段名
      • 模型类必须写在app下的models.py中
      • 模型如果需要映射到数据库,所在的app必须被安装
      • 一个数据库对应一个模型类,表中的字段,对应模型的类属性

    3.模型的创建与激活

    • 模型的创建
      1 from django.db import models
      2 
      3 # Create your models here.
      4 
      5 class Student(models.Model):
      6     name = models.CharField(max_length=20)
      7     age = models.SmallIntegerField(default=0)
      8     sex = models.SmallIntegerField(default=1)
      9     ctime = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)

      在app目录下的models.py中创建模型类,该类继承models.Model,数据库的字段为该类的属性名。

      • 每一个模型都是django.db.models.Model的子类的
      • 类变量 表示模型中的数据库的字段
      • 每一个字段有一个字段类的实例来表示
    • 模型的激活
      • 在项目中注册app(使用pycharm创建app的会自动配置)
      • 运行数据库迁移命令
        • python manage.py makemigrations <项目名>
          • --告诉django,我们做了哪些的数据库的修改,准备迁移
            • 该命令会在app目录下的migrations目录下生成py文件
          • sqlmigrate: -- 从迁移获取sql语句
      • 运行migrate命令,使迁移生效
        • python manage.py sqlmigrate <app_name>  0001_initial.py(生成的py文件)
        • python manager.py migrate <app_name>    // app_name如果不写则默认应用所有
          • 该命令会在数据库中创建表

    4.数据的增删改查

    • 工具: django shell  调试工具
      • python manager.py shell
        • 配合ipython使用
    • 进入models环境
      • from crm(app_name).models import  Student(创建的类名) 
        • Student.object.all()
          • 返回一个queryset的对象
        • s = Student.object.all()
        • s.query
          • 返回一个django.db.models.sql.query.Query的对象
          • 其__str__方法返回的结果为 select *  from Student   // * 为所有的字段
        • ----------------------------
        • Student.object.get(id=1)
        • Student.object.get(name='ivy')
          • 可通过条件查询,返回类的对象
          • 当get查询到多个值得时候会报错,所以get一般和主键搭配使用
          • 主键可以直接用变量pk代替
        • Student.object.count()
          • 返回总的数量
        • ----------------------------
        • s1 = Student(name='ivy', age=2,)
        • 先实例化一个Student对象
        • s1.save()
          • 保存到数据库里
        • -------------------------------------
        • s2 = Student()
          • 直接实例化对象
        • s2.name = 'bob'
        • s2.age = 10
        • s2.save()
        • -------------------------------------
        • s3 = Student.objects.create(name='summer', age=23)
          • 该方法直接操作数据库
          • 返回一个类的对象
        • -------------------------------------
        • s4 = Student.objects.get_or_create(name='ivy')
          • 该方法会直接操作数据库 
          • 返回一个元祖
          • 第一元素为类的对象
          • 第二个元素为bool值,如果s4已经存在,则bool值为False,如果为创建而来,则是True
        • 直接对对象直接重新赋值
        • update方法
          • Student.objects.filter(name='ivy').update(age=20)
        • delete方法
          • Student.objects.filter(name='ivy').delete()
  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/10670005.html
Copyright © 2011-2022 走看看