前言

Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库

只需要在settings.py中配置即可,不用更改models.py中的代码。当我们的web项目需要新增一张表和字段内容时,需要在models.py里面写相关内容。

配置数据库

django配置mysql数据库教程参考前面一篇https://www.cnblogs.com/yoyoketang/p/9997520.html

需先安装mysql数据库驱动 pip install mysqlclient==1.3.10

settings.py 文件中找到 DATABASES 配置项, django默认连接sqllite。ENGINE:是指连接数据库驱动的名称,有以下几种情况:

django.db.backends.postgresql 连接 PostgreSQL
django.db.backends.mysql 连接 mysql
django.db.backends.sqlite3 连接 sqlite
django.db.backends.oracle 连接 oracle

这里我们连接mysql需要账户密码,也就是之前安装mysql的root用户名,和自己设置的密码,NAME是数据库的名称,连接配置如下:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'test',
'USER': 'root',
'PASSWORD': 'yoyo',
'HOST':'localhost',
'PORT':'3306',
}
}

django里面无法创建数据库,数据库名称test需要手动创建,只能创建表名

创建表

编辑models.py文件,比如我想新增一张person表,有2个字段:name、age。name是字符串类型,age是int类型

希望创建的表和字段效果设计如下(用navicat工具查看的)

那么对应models.py文件代码为

# models.py

from django.db import models

# Create your models here.

# 我们新建了一个Person类,继承自models.Model,
class Person(models.Model):
name = models.CharField(max_length=30)
age = models.IntegerField()

接着打开cmd,cd到django的根目录,执行2个指令

python manage.py makemigrations

python manage.py migrate

D:\web_djo\helloworld>python manage.py makemigrations
Migrations for 'hello':
hello\migrations\0006_person.py
- Create model Person D:\web_djo\helloworld>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, hello, sessions
Running migrations:
Applying hello.0006_person... OK

makemigrations和migrate

makemigrations 这一步执行后,会在当前app目录下生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容

migrate就是执行之前生成的migrations文件,这一步才是操作数据库的一步,执行完成后,数据库里面会新增一张表hello_person

  • 新建的表名是app名称_class类名称的组合,自动转化成小写,也就是hello_person

  • name = models.CharField(max_length=30) 这个表示name字段是字符串类型(CharField),最大长度是30个字符串

  • age = models.IntegerField() 这个表示age字段是int类型(CharField)

  • id是默认的主键

字段类型

django的models里面字段类型除了上面的常用的 models.CharField和models.IntegerField,还有更多的类型

1、models.AutoField  自增列= int(11)

  如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键 primary_key=True。

2、models.CharField  字符串字段

  必须 max_length 参数

3、models.BooleanField  布尔类型=tinyint(1)

  不能为空,Blank=True

4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar

  继承CharField,所以必须 max_lenght 参数

5、models.DateField  日期类型 date

  对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。

6、models.DateTimeField  日期类型 datetime

  同DateField的参数

7、models.Decimal  十进制小数类型= decimal

  必须指定整数位max_digits和小数位decimal_places

8、models.EmailField  字符串类型(正则表达式邮箱)=varchar

  对字符串进行正则表达式

9、models.FloatField  浮点类型= double

10、models.IntegerField  整形

11、models.BigIntegerField  长整形

  integer_field_ranges ={

    'SmallIntegerField'

python测试开发django-11.模型models详解的更多相关文章

  1. python标准库介绍——11 atexit 模块详解

    === atexit 模块=== (用于2.0版本及以上) ``atexit`` 模块允许你注册一个或多个终止函数(暂且这么叫), 这些函数将在解释器终止前被自动调用. 调用 ``register`` ...

  2. python测试开发django-197.django-celery-beat 定时任务

    前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...

  3. python测试开发django-36.一对一(OneToOneField)关系查询

    前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...

  4. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  5. python测试开发django-rest-framework-63.基于函数的视图(@api_view())

    前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...

  6. Python测试开发-创建模态框及保存数据

    Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...

  7. python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

    前言 xadmin的详情页面主要是用form_layout布局,学会了完全可以不用写html代码,也能做出很好看的页面. xadmin的html页面是用的Bootstrap3框架设计的,layout布 ...

  8. python测试开发django-16.JsonResponse返回中文编码问题

    前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...

  9. 2019第一期《python测试开发》课程,10月13号开学

    2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...

随机推荐

  1. Windows环境下python的安装与使用

    Windows环境下python的安装与使用 一.python如何运行程序 首先说一下python解释器,它是一种让其他程序运行起来的程序.当你编写了一段python程序,python解释器将读取程序 ...

  2. PHP并发操作下的加锁

    最近做后台统计的工具,统计肯定是一个需要运算好久的数据 容许一个用户在一个时间内进行操作,这个时候就需要用到锁了,将这个操作过程锁起来.在用了cache的时候,cache失效可能导致瞬间的多数并发请求 ...

  3. Git(三)Git的远程仓库

    一. 添加远程库 现在我们已经在本地创建了一个Git仓库,又想让其他人来协作开发,此时就可以把本地仓库同步到远程仓库,同时还增加了本地仓库的一个备份.常用的远程仓库就是github:https://g ...

  4. 【LOJ】 #6012. 「网络流 24 题」分配问题

    题解 又写了一遍KM算法,这题刚好是把最大最小KM拼在一起写的,感觉比较有记录价值 感觉KM始终不熟啊QAQ 算法流程大抵如下,原理就是每次我们通过减少最少的匹配量达成最大匹配,所以获得的一定是最大价 ...

  5. 【LOJ】#2510. 「AHOI / HNOI2018」道路

    题解 读题是做题关键 我们设\(dp[u][l][r]\)表示\(u\)节点上方没改\(l\)条公路和\(r\)条铁路 然后记忆化搜索,枚举这条点改左边还是右边 代码 #include <bit ...

  6. 【LOJ】#2082. 「JSOI2016」炸弹攻击 2

    题解 想到n3发现思路有点卡住了 对于每个发射塔把激光塔和敌人按照极角排序,对于一个激光塔,和它转角不超过pi的激光塔中间夹的敌人总和就是答案 记录前缀和,用two-Points扫一下就行 代码 #i ...

  7. rhev 虚拟化

    引用自:https://blog.csdn.net/Jmilk/article/details/50964121#rhev-hhypervisor-%E8%99%9A%E6%8B%9F%E6%9C%B ...

  8. zookeeper集群自动启动脚本

    定义脚本boot.sh启动zookeeper集群(hadoop1,hadoop2,hadoop3) #!/bin/bash echo "start zkServer..." do ...

  9. ClouderaManager中Event Server报No such file or directory

    错误日志如下: 2015-06-24 06:13:10,176 ERROR com.cloudera.cmf.eventcatcher.server.EventCatcherService: Erro ...

  10. Ubuntu 16.04设置rc.local开机启动命令/脚本的方法

    Ubuntu 16.04设置rc.local开机启动命令/脚本的方法       Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启 ...