• ORM相关字段,参数及数据库迁移


    ORM简介

      ORM(object-relational-mapping),简单理解,就是提供了一种用面向对象语言来操作数据库的方式,解决了面向对象和关系数据库之间不匹配的问题,让编程者更容易、便捷的操作数据库,让数据库的变更变得更加简单。

      ORM方法论基于的3个核心原则:                                                                       

         1.简单:以最基本的形式建模数据

         2.传达性:让数据库结构通过人们都能理解的语言实现。

         3.精确性:基于数据库模型创建正确、标准化的结构。

    部分常用字段:

      1.CharField,IntegerField,AutoField,EmailField,TextField(textarea),BooleanField(checkbox),DateTimeField(类似DateField)

      2.FloatField
        参数:max-digits 总位数(不包括小数点和符号)  decimal_places 小数位数

      3.DateField

        参数:  Argument     描述-----(可选)
            auto_now      对象保存时,将当前时间设置为值,通常用于表示最后修改日期的时间戳.
            auto_now_add   当对象首次被创建时,自动将该字段的值设置为当前时间.通常用于表示对象创建时间.(仅仅在admin中有意义...)

      4.ImageField

        参数:height_field 和 width_field if  按此尺寸规格保存图片(可选)

      5.FileField
        参数:upload_to 保存下载文件的本地文件系统路径.

           default  初始默认文件

    avatar = models.FileField(upload_to='avatars/', default="/avatars/default.png")
      会将文件对象下载到项目的根目录中avatars文件夹中(如果没有avatar文件夹,Django会自动创建),user_obj的avatar存的是文件的相对路径。

      6.URLField
        参数:verify_exists 默认为True, 给定的 URL 会预先检查是否存在( 即URL是否被有效装入且没有返回404响应).    admin----------<input type="text">

      7.NullBooleanField
        意义: 类似 BooleanField加null=True   推荐使用
            admin 用一个选择框 <select> (三个可选择的值: "Unknown", "Yes" 和 "No" ) 来表示这种字段数据.

      8.SlugField
        意义:"Slug" 报纸术语,某个东西的小小标记(短签), 只包含字母,数字,下划线和连字符.通常用于URLs
      9.XMLField
        意义:一个校验值是否为合法XML的 TextField
        参数:(必须) schema_path  它是一个用来校验文本的 RelaxNG schema #的文件系统路径.
      10.FilePathField
        可选项目为某个特定目录下的文件名.
        参数: (必须)path      一个目录的绝对文件系统路径.  FilePathField据此得到可选项目
            match (可选)    一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名.此正则表达式只会应用到 base filename 而不是路径全名.  Example: "foo.*.txt^", 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif.

            recursive (可选)  True or False. 默认值是 False. 是否包括 path 下面的全部子目录.
        Example:  FilePathField(path="/home/images", match="foo.*", recursive=True)...会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

      注意:在一个 model 中使用 FileField 或 ImageField 需要以下步骤:
        (1)在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件.(出于性能考虑,这些文件并不保存到数据库.) 定义MEDIA_URL 作为该目录的公共 URL. 要确保该目录对WEB服务器用户帐号是可写的.

        (2) 在你的 model 中添加 FileField 或 ImageField, 并确保定义了 upload_to 选项,以告诉 Django使用 MEDIA_ROOT 的哪个子目录保存上传文件.你的数据库中要保存的只是文件的路径(相对于    MEDIA_ROOT).出于习惯你一定很想使用 Django 提供的 get_<#fieldname>_url 函数.举例来说,如果你的 ImageField 叫作 mug_shot, 你就可以在模板中以 {{ object.#get_mug_shot_url }} 这样的方式得到图像的绝对路径.

    部分常用参数:

      1.null

      2.blank 如果为True,该字段允许不填。默认为False。要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字

       段的blank=False,该字段就是必填的。

      3.default 字段的默认值。可以是一个值或者可调用对象。如果可调用,每有新对象被创建它都会被调用。

      4.primary_key 若为True,则为主键。

      5.unique 若为True, 则唯一

      6.choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,而且这个选择框的选项就是choices 中的选

        项。

    数据库迁移:

      

    Setting设置:

     1     Setting设置:
     2         DATABASES = {
     3             'default': {
     4                 'ENGINE': 'django.db.backends.mysql',
     5                 'NAME':'bms',
     6                 'USER':'root',
     7                 'PASSWORD':'',
     8                 'HOST':'127.0.0.1',
     9                 'PORT':3306,#  端口 默认3306
    10             }
    11         }
    View Code

    数据库迁移命令:

    python manage.py makemigrations
    python manage.py migrate

    对于Python3,默认驱动MySQLdb,而我们需要导入驱动pymysql,这样做:在项目名文件下的__init__.py中写入:

    import pymysql
    pymysql.install_as_MySQLdb()

    如果迁移没成功,须看settings中的INSTALLED_APPS里有没有当前的app名称

    MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:通过查找路径C:ProgramsPythonPython36-32Libsite-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql

    将这个路径里的文件把下面这条语句注释掉:

    if version < (1, 3, 3):
         raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

    若要看转换过程中的sql,在配置文件中植入:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    } 
    View Code

    表创建完成。

  • 相关阅读:
    java实现第七届蓝桥杯阶乘位数
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯圆圈舞
    java实现第七届蓝桥杯打靶
    java实现第七届蓝桥杯打靶
    Mysql 查询一天中,每个小时数据的数量
    mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
  • 原文地址:https://www.cnblogs.com/lamb2018/p/9602409.html
Copyright © 2020-2023  润新知