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

表创建完成。

原文地址:https://www.cnblogs.com/lamb2018/p/9602409.html