• Django 学习第六天——Django模型基础第一节


    一、Django 的 ORM 简介:

      Django的ORM系统的分析:

     

        1、ORM 概念:对象关系映射Object Relational Mapping,简称ORM)

        2、ORM的优势:不用直接编写SQL代码,只需像操作对象一样从数据库操作数据;

      django 模型映射关系:

     

        1、模型类必须写在 app 下的 models.py 文件里;

        2、模型如果需要映射到数据库,所在的 app 必须被注册(在主目录的 settings.py 文件中的 INSTALLED_APPS 中添加该 app 名);

        3、一个数据表对应一个模型类,表中的字段,对应模型中的类属性;

    二、数据库连接配置:

      数据库配置:

        在主目录的 settings.py 中配置 DATABASES:

    DATABASES = { 
        'default': { 
            'ENGINE': 'django.db.backends.mysql', # 数据库引擎 
            'NAME': 'mydb', #数据库名称 
            'USER': 'user', # 链接数据库的用户名 
            'PASSWORD': 'password', # 链接数据库的密码 
            'HOST': '127.0.0.1', # mysql服务器的域名ip地址
            'PORT': '3306', # mysql的一个端口号,默认是3306 
        } 
    } 

        设置时区:再主目录中的 settings.py 中设置 TIME_ZONE = 'Asia/ShangHai' # 北京时间

      创建一个管理员用户taka账号,密码为 taka:   

    CREATE USER 'taka'@'%'IDENTIFIED BY 'taka';

      给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。    

    GRANT ALL ON *.* TO 'taka'@'%';

      使授权立即生效:   

    FLUSH PRIVILEGES;

       pymysql 数据库链接器的配置:

        安装:pip install pymysql

        在主目录下的 __init__.py 文件添加:

    import pymysql 
    
    pymysql.install_as_MySQLdb()

    三、模型的创建与映射:

      使用 django 中的模型:

        每一个模型都是django.db.models.Model 的子类

        在 app 下面的 models.py 中创建 django 的模型类:

     

        注:这个 __str__ 方法的作用是我们在查询是看到的东西

      常用的模型字段:

        IntegerField : 整型,映射到数据库中的int类型。

        SmallIntegerField : 小整形

        CharField: 字符类型,映射到数据库中的varchar类型,必须通过max_length指定最大长度。

        TextField: 文本类型,映射到数据库中的text类型。

        BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递

    True/False进去。如果要可以为空,则用NullBooleanField。

        DateField: 日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可

    以设置- - DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置

        DateField.auto_now_add当对象第一次被创建时自动设置当前时间。

        DateTimeField: 日期时间类型。映射到数据库中的是datetime类型,在使用的时候,传

    datetime.datetime()进去

      字段常用的参数:

        primary_key: 指定是否为主键。

        auto_increment:自增长

        unique: 指定是否唯一。

        null: 指定是否为空,默认为False。

        blank: 等于True时form表单验证时可以为空,默认为False。

        default: 设置默认值。

        verbose_name:备注;也可以直接写在第一位不用加参数

        DateTimeField(DateField)—— auto_now=True:

          每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。

        DateTimeField(DateField)—— auto_now_add=True:

          第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值。

      将模型类映射到数据库:

        在执行命令前,保证创建模型的 app 是已经注册过的 app;

        1、首先执行以下命令,会创建映射文件:

    python manage.py makemigrations

          该命令后面可以跟 app 名称,表示指定对某个 app 的模型进行映射,没写所有的 app 都执行。

    python manage.py sqlmigrate app_name 0001 # app_name时app的名字,0001 是映射文件的前缀

          执行该命令可以看到执行的 sql 原生语句

        2、再执行以下命令,将映射文件中的映射数据提交到数据库中

    python manage.py migrate

          该命令后面可以跟 app 名称,表示指定对某个 app 的模型进行迁移,没写所有的 app 都执行。

      将模型类映射到数据库:

        打开数据我们能看到创建的以 app 名 _模型名的数据表,而其他的一些表格是 django 自动生成的;

        注意:如果要删除表,那么可以去 django 模型中注释掉模型类,然后执行映射的命令,不要手动再命令行里面去删除;

    四、数据的 -删-改-查:

      调试工具:在根目录执行:

        先安装ipython:pip install ipython

    python manage.py shell

       再视图函数中导入 创建的 模型类,然后使用下面的方法实现增,删,改,查操作数据;

    增:

     

    查:

     

        注:通过print可以在后台看到我们访问到的数据,并且输出方式就是模型中的__str__的格式.

      all() 和 filter() 方法返回的是 QuerySet 对象;

      get() 方式返回的单个对象,如果符合条件的对象有多个,则 get 报错!

    改:

     

    删:

     

  • 相关阅读:
    【2020-01-28】陪伴即陪伴,擦汗即擦汗
    【2020-01-27】曼巴走了,但他还在
    【2020-01-26】今年,远亲不如近邻了
    【2020-01-25】新的一年,新的传统
    【2020-01-24】上天为这小女孩开了一扇小小窗
    【2020-01-23】故作假装的毛病
    day 31 html(二) 和css入门
    前端 day 30 html 基础一
    day 17python 面对对象之继承
    多并发编程基础 之协成
  • 原文地址:https://www.cnblogs.com/2018-8-31/p/10497720.html
Copyright © 2020-2023  润新知