首页 > 其他 > 详细

Django框架之Model系统:ORM基础(一)

时间:2019-04-11 11:02:35      阅读:134      评论:0      收藏:0      [点我收藏+]

一、什么是ORM?

ORM:Object Relational Mapping(对象关系映射)

映射关系:

  表名 --------------------》类名

  字段--------------------》属性

  表记录-----------------》类实例化对象

ORM的两大功能:

  操作表:

    - 创建表

    - 修改表

    - 删除表

  操作数据行:

    - 增删改查

ORM利用pymysql第三方工具链接数据库

Django没办法帮我们创建数据库,只能我们创建完之后告诉它,让django去链接

二、创建表之前的准备工作

一、自己创建数据库

二、在settings里面配置mysql数据库链接

  sqlite3------改为mysql(如果使用的是mysql数据库才进行此步骤)

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

  

  

  

三、app01中的--init--文件

导入pymysql模块,在——init——文件中,告诉Django使用pymysql模块连接MySQL数据库:

import pymysql
pymysql.install_as_MySQLdb()

四、创建数据库表

在models.py中创建对应的Book表

#models.py
class Book(models.Model):  #必须要继承的
    nid = models.AutoField(primary_key=True)  #自增id(可以不写,默认会有自增id)
    title = models.CharField(max_length=32)
    publishDdata = models.DateField()  #出版日期
    author = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5,decimal_places=2)  #一共5位,保留两位小数
 

  

 

 执行命令创建:(需要记住的!!!) 

python3 manage.py makemigrations   创建脚本
python3 manage.py migrate   迁移

在model中创建表所对应的字段:

技术分享图片
  1   AutoField(Field)
  2         - int自增列,必须填入参数 primary_key=True
  3 
  4     BigAutoField(AutoField)
  5         - bigint自增列,必须填入参数 primary_key=True
  6 
  7         注:当model中如果没有自增列,则自动会创建一个列名为id的列
  8         from django.db import models
  9 
 10         class UserInfo(models.Model):
 11             # 自动创建一个列名为id的且为自增的整数列
 12             username = models.CharField(max_length=32)
 13 
 14         class Group(models.Model):
 15             # 自定义自增列
 16             nid = models.AutoField(primary_key=True)
 17             name = models.CharField(max_length=32)
 18 
 19     SmallIntegerField(IntegerField):
 20         - 小整数 -32768 ~ 32767
 21 
 22     PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
 23         - 正小整数 0 ~ 32767
 24     IntegerField(Field)
 25         - 整数列(有符号的) -2147483648 ~ 2147483647
 26 
 27     PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
 28         - 正整数 0 ~ 2147483647
 29 
 30     BigIntegerField(IntegerField):
 31         - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
 32 
 33     BooleanField(Field)
 34         - 布尔值类型
 35 
 36     NullBooleanField(Field):
 37         - 可以为空的布尔值
 38 
 39     CharField(Field)
 40         - 字符类型
 41         - 必须提供max_length参数, max_length表示字符长度
 42 
 43     TextField(Field)
 44         - 文本类型
 45 
 46     EmailField(CharField):
 47         - 字符串类型,Django Admin以及ModelForm中提供验证机制
 48 
 49     IPAddressField(Field)
 50         - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
 51 
 52     GenericIPAddressField(Field)
 53         - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
 54         - 参数:
 55             protocol,用于指定Ipv4或Ipv6, both,"ipv4","ipv6"
 56             unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
 57 
 58     URLField(CharField)
 59         - 字符串类型,Django Admin以及ModelForm中提供验证 URL
 60 
 61     SlugField(CharField)
 62         - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
 63 
 64     CommaSeparatedIntegerField(CharField)
 65         - 字符串类型,格式必须为逗号分割的数字
 66 
 67     UUIDField(Field)
 68         - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
 69 
 70     FilePathField(Field)
 71         - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
 72         - 参数:
 73                 path,                      文件夹路径
 74                 match=None,                正则匹配
 75                 recursive=False,           递归下面的文件夹
 76                 allow_files=True,          允许文件
 77                 allow_folders=False,       允许文件夹
 78 
 79     FileField(Field)
 80         - 字符串,路径保存在数据库,文件上传到指定目录
 81         - 参数:
 82             upload_to = ""      上传文件的保存路径
 83             storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
 84 
 85     ImageField(FileField)
 86         - 字符串,路径保存在数据库,文件上传到指定目录
 87         - 参数:
 88             upload_to = ""      上传文件的保存路径
 89             storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
 90             width_field=None,   上传图片的高度保存的数据库字段名(字符串)
 91             height_field=None   上传图片的宽度保存的数据库字段名(字符串)
 92 
 93     DateTimeField(DateField)
 94         - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
 95 
 96     DateField(DateTimeCheckMixin, Field)
 97         - 日期格式      YYYY-MM-DD
 98 
 99     TimeField(DateTimeCheckMixin, Field)
100         - 时间格式      HH:MM[:ss[.uuuuuu]]
101 
102     DurationField(Field)
103         - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
104 
105     FloatField(Field)
106         - 浮点型
107 
108     DecimalField(Field)
109         - 10进制小数
110         - 参数:
111             max_digits,小数总长度
112             decimal_places,小数位长度
113 
114     BinaryField(Field)
115         - 二进制类型
字段

 

 

 五、查看数据库的sql语句(加在settings.py)

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

 

Django框架之Model系统:ORM基础(一)

原文:https://www.cnblogs.com/LeiJ/p/10688288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!