配置数据库信息

  1、settings配置

  DATABASES = {

    "default": {
        "ENGINE""django.db.backends.mysql",
        "NAME""你的数据库名称",  # 需要自己手动创建数据库
        "USER""数据库用户名",
        "PASSWORD""数据库密码",
        "HOST""数据库IP",
        "POST"3306
    }
  }

  2、在django项目的同名目录下的init文件中添加以下代码

    import pymysql

    pymysql.install_as_MySQLdb()

  

  补充:

    使用django2.0以上进行开发,不需要添加上述代码。

    django2.0以上,直接使用mysqlclient,将django与mysql数据库进行连接。

      pip install mysqlclient,安装该模块即可

    ps:

      网上有很多使用django2.0进行开发的情况下,使用pymysql模块进行数据库连接出现报错:

        django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

      然后需要通过修改源码来解决,这样也能够解决问题,但是毕竟修改源码对后续项目开发是否会有影响是不可预知的,

      所以,个人推荐django2.0以上开发,直接安装mysqlclient模块,进行数据库操作。

模型类

  1、定义模型类时需要继承models.Model

  2、定义字段类型的时候,也是通过models来调用对应的字段类型

  

  由于一张表中必须要有一个主键字段 并且一般情况下都叫id字段

  所以当不定义主键字段的时候 orm会自动创建一个名为id主键字段

  也就意味着   在创建模型表的时候如果主键字段名没有额外的叫法 那么主键字段可以省略不写

字段

  1、AutoField

    自增的整型字段,必填参数primary_key=True,则成为数据库的主键。无该字段时,django自动创建。

    一个model不能有两个AutoField字段。

  2、IntegerField

    一个整数类型。数值的范围是 -2147483648 ~ 2147483647。

    最多存放10位数字,因此不能用该字段存储手机号

  3、CharField

    字符类型,必须提供max_length参数。max_length表示字符的长度。

  4、DateField

    日期类型,日期格式为YYYY-MM-DD,相当于Python中的datetime.date的实例。

    参数:

        auto_now:新增时自动设置当前时间,每次修改时会更新当前日期时间

        auto_now_add:新创建对象时自动添加当前日期时间,修改时不会更新当前日期时间

    auto_now和auto_now_add和default参数是互斥的,不能同时设置。

  5、DatetimeField

    日期时间字段,格式为YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime的实例。

  

  6、AutoField(Field)
    - int自增列,必须填入参数 primary_key=True

  7、BigAutoField(AutoField)
    - bigint自增列,必须填入参数 primary_key=True

    注:当model中如果没有自增列,则自动会创建一个列名为id的列
      from django.db import models

      class UserInfo(models.Model):
      # 自动创建一个列名为id的且为自增的整数列
      username = models.CharField(max_length=32)

      

      class Group(models.Model):
      # 自定义自增列
      nid = models.AutoField(primary_key=True)
      name = models.CharField(max_length=32)

  8、SmallIntegerField(IntegerField):
    - 小整数 -32768 ~ 32767

  9、PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正小整数 0 ~ 32767

  10、IntegerField(Field)
    - 整数列(有符号的) -2147483648 ~ 2147483647

  11、PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
    - 正整数 0 ~ 2147483647

  12、BigIntegerField(IntegerField):
    - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807

  13、BooleanField(Field)
    - 布尔值类型

  14、NullBooleanField(Field):
    - 可以为空的布尔值

  15、CharField(Field)
    - 字符类型
    - 必须提供max_length参数, max_length表示字符长度

  16、TextField(Field)
    - 文本类型

  17、EmailField(CharField):
    - 字符串类型,Django Admin以及ModelForm中提供验证机制

  18、IPAddressField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制

  19、GenericIPAddressField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
    - 参数:
    protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
    unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"

  20、URLField(CharField)
    - 字符串类型,Django Admin以及ModelForm中提供验证 URL

  21、SlugField(CharField)
    - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)

  22、CommaSeparatedIntegerField(CharField)
    - 字符串类型,格式必须为逗号分割的数字

  23、UUIDField(Field)
    - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证

  24、FilePathField(Field)
    - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
    - 参数:
      path, 文件夹路径
      match=None, 正则匹配
      recursive=False, 递归下面的文件夹
      allow_files=True, 允许文件
      allow_folders=False, 允许文件夹

  25、FileField(Field)
    - 字符串,路径保存在数据库,文件上传到指定目录
    - 参数:
      upload_to = "" 上传文件的保存路径
      storage = None 存储组件,默认django.core.files.storage.FileSystemStorage

  26、ImageField(FileField)

    - 字符串,路径保存在数据库,文件上传到指定目录
    - 参数:
      upload_to = "" 上传文件的保存路径
      storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
      width_field=None, 上传图片的高度保存的数据库字段名(字符串)
      height_field=None 上传图片的宽度保存的数据库字段名(字符串)

  27、DateTimeField(DateField)
    - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]

  28、DateField(DateTimeCheckMixin, Field)
    - 日期格式 YYYY-MM-DD

  29、TimeField(DateTimeCheckMixin, Field)
    - 时间格式 HH:MM[:ss[.uuuuuu]]

  30、FloatField(Field)
    - 浮点型

自定义一个char类型字段

class MyCharField(models.Field):

    """
    自定义的char类型的字段类
    """
    def __init__(self, max_length, *args, **kwargs):
        self.max_length = max_length
        super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs)
 
    def db_type(self, connection):
        """
        限定生成数据库表的字段类型为char,长度为max_length指定的值
        """
        return 'char(%s)' % self.max_length
 
使用自定义字段:
class Class(models.Model):

    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=25)
    # 使用自定义的char类型的字段
    cname = MyCharField(max_length=25)
 
 

字段参数

  null:数据库中字段是否可用为空
  blank:用户输入是够可用空
    null和blank需要一定设置,如果blank为True,null为False,插入数据会出错
  db_column:显示在数据库中的字段列名
  primary_key:字段的主键值
  default:该字段的默认值(没有设置该字段时,就使用默认值)
  db_index:该字段是否建立索引
  unique:字段的唯一索引
  unique_for_date:字段中的日期部分的唯一索引
  unique_for_month:字段中的月部分的唯一索引
  unique_for_year:字段中的年部分的唯一索引
 
  verbose_name:字段在admin界面中显示的名称
  editable:字段在admin界面中是否可用编辑
  help_text:字段在admin界面中的提示信息
  choices:字段的值必须在choices列表中选择
    choices=[(0,"零"),(1,"一")]
    元组的第一个数据是存放在数据库的
          第二个数据是显示在admin界面中的
  error_messages:自定义错误信息(字典类型)
  validators:自定义错误验证(列表类型)
 
  具体见官网
 

模型类的Meta

  class Meta:

        # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
        db_table = "table_name"   # 将数据库中的表名修改成自定义的名称
 
        # admin界面中中显示的表名称
        verbose_name = '个人信息'
 
        # verbose_name加s
        verbose_name_plural = '所有用户信息'
 
        # 联合索引 
        index_together = [
            ("pub_date""deadline"),   # 应为两个存在的字段
        ]
 
        # 联合唯一索引
        unique_together = (("driver""restaurant"),)   # 应为两个存在的字段

  还有数据库的排序顺序等,具体见官网

 

 

最新文章

  1. [翻译]用 Puppet 搭建易管理的服务器基础架构(3)
  2. 老生长谈:css实现右侧固定宽度,左侧宽度自适应
  3. quick cocos2d-x 入门---井字棋
  4. SQL语句中,Conversion failed when converting datetime from character string.错误的解决办法
  5. Java当中的内存分配以及值传递问题内存解析
  6. android4.3 Bluetooth(le)分析之startLeScan分析
  7. ECharts SSH+JQueryAjax+Json+JSP将数据库中数据填充到ECharts中
  8. cojs QAQ的序列 解题报告
  9. Spring IoC容器的设计—2—主线
  10. 团体程序设计天梯赛-练习集L2-003. 月饼
  11. Oracle的用户管理,授权及备份
  12. c++中的namespace(附程序运行图)
  13. highstaock+websocket实现动态展现
  14. Spring Cloud入门教程-Hystrix断路器实现容错和降级
  15. Java的selenium代码随笔(7)
  16. aview安装和使用
  17. [Android]Eclipse 安装 ADT[Android Development Tooling] 失败的两种解决办法
  18. 实现一个 Virtual DOM 算法
  19. 摘:"error LNK2019: 无法解析的外部符号 该符号在函数 中被引用" 错误原因
  20. Maven+MyBatis 初试

热门文章

  1. hystrix熔断器之配置
  2. Object.defineProperty和proxy
  3. 手对手的教你用canvas画一个简单的海报
  4. 简单两步使用css控制div下导航栏ul居中显示
  5. 日志分析平台ELK之日志收集器filebeat
  6. 当安装、卸载件包时,出现依赖问题 error: Failed dependencies解决办法
  7. Matlab 中 imshow 函数
  8. 如何使用MATLAB对图片的RGB三种颜色进行提取
  9. Tensorflow学习笔记No.0
  10. 列举python的可变类型和不可变类型