Django模型数据库配置
Django模型
1.数据库配置
在虚拟开发环境中,安装mysql的数据库驱动mysqlclient
pip install mysqlclient
在项⽬的 settings.py ⽂件中找到DATABASES 配置项,将其信息修改为:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #mysql数据库引擎 'NAME': 'test', #数据库名 'HOST':'localhost', #数据库服务器地址 'USER': 'test', #mysql数据库⽤户名 'PASSWORD': 'test123', #密码 'PORT':3306, #端⼝号,可选 } }
2 模型属性
#属性定义语法为: 属性 = models.字段类型(选项)
属性命名规则:
- 不能是python的保留关键字
- 不允许使⽤连续的下划线,因为连续下划线在查询中会⽤到
- 定义属性时需要指定字段类型
- 主键⼀般不⽤⾃⼰定义,django会⾃动创建⾃增⻓主键列,如果你⾃⼰定
- 义了主键,则django不会再⾃动⽣成主键
2.2.1字段类型
AutoField: ⼀个根据实际Id⾃动增⻓的 IntegerField(通常不指定⾃动⽣成) CharField: 字符串,默认的表单样式是TextInputmax_length=字符长度
TextField: ⼤⽂本字段,⼀般超过4000使⽤,默认的表单控件是Textarea
IntegerField:整数DecimalField 使⽤python的Decimal实例表示的⼗进制浮点数 ,max_digits总位数 ;ecimal_places⼩数位数 ;
FloatField:⽤Python的flfloat实例来表示的浮点数
BooleanField : true/false 字段,此字段的默认 表单控制是CheckboxInput
NullBooleanField :⽀持null、true、false三种值
DateField : 使⽤Python的datetime.date实例表示的⽇期,该字段默认对 应的表单控件是⼀个TextInput , auto_now和auto_now_add、default这三个参数 不能同时共存
TimeField : 使⽤Python的datetime.time实 例表示的时间 参数同DateField DateTimeField : 使⽤Python的 datetime.datetime实例表示的 ⽇期和时间 参数同DateField
ImageField: 继承了FileField的所有属性和⽅ 法,但对上传的对象进⾏校 验,确保它是个有效的image
-
auto_now: 每次保存对象时,⾃动设置该字段为当前时间,⽤于"最后⼀次修 改"的时间戳,它总是使⽤当前⽇期,默认为false
-
auto_now_add: 当对象第⼀次被创建时⾃动设置当前时间,⽤于创建的时间 戳,它总是使⽤当前⽇期,默认为false
3.定义模型
我们可以在应⽤的models.py中定义模型:
from django.db import models class 模型名(models.Model): 属性名 = models.字段名(字段选项/参数) ..... class Meta: #可选,任何⾮字段的设置可以写到Meta中 db_table = 'user' #指定表名为uesr
- 数据库的表名等于:应⽤名_模型名,如果想指定表名,可以在Meta中使⽤ db_table指定
- 如果没有指定主键,Django将⾃动给表创建⼀个⾃增⻓主键id
id = models.AutoField(primary_key=True)
如:
from django.db import models from django.utils import timezone #⽤户类 class User(models.Model): uid = models.AutoField(primary_key=True) #⾃增主键 uname = models.CharField(max_length=60) password = models.CharField(max_length=32) user_type = ((1,'超级管理员'),(2,'普通⽤户')) type = models.IntegerField(default=2,choices=user_type) regtime = models.DateTimeField(default=timezone.now) #缺省值是当 前时间 ip = models.IntegerField(null=True) login_type = ((1,'允许登录'),(2,'禁⽌登录')) #⽤户⾃定义类型对应mysql的enum类型 allowed = models.IntegerField(default=1,choices=login_type) email = models.CharField(max_length=100,null=True) memo = models.CharField(max_length=1000,null=True) class Meta: db_table = 'user' #表名
4.激活模型
- 创建迁移⽂件 (此刻表并没有创建到库中)
python manage.py makemigrations
- 执⾏迁移 (将模型创建到库中)
python manage.py migrate
然后在应⽤的migrations⽬录中应该⽣成了迁移⽂件
├── app │ ├── admin.py │ ├── apps.py │ ├── __init__.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── __init__.py
⽣成的表结构如下:
CREATE TABLE `user` ( `uid` int(11) NOT NULL AUTO_INCREMENT, `uname` varchar(60) NOT NULL, `password` char(32) NOT NULL, `type` enum('超级管理员','普通⽤户') DEFAULT '普通⽤户', `regtime` datetime DEFAULT NULL, `ip` int(11) DEFAULT NULL, `allowed` enum('允许登录','禁⽌登录') DEFAULT '允许登录', `email` varchar(100) DEFAULT NULL, `memo` varchar(1000) DEFAULT NULL, PRIMARY KEY (`uid`) )
注意:任何对字段或表的修改都需要重新迁移
- 反向迁移
可以根据数据库中表⾃动创建模型
python manage.py inspectdb > App/models
5.模型的使用
我们可以再交互式Python shel环境中,使⽤Django提供的免费API。要调⽤Python shell,请使用以下命令:
$ python manage.py shell Python 3.6.4 (default, Sep 13 2018, 02:27:17) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>>
- 点赞
- 收藏
- 分享
- 文章举报
- 咸鱼笔记—Django模型(数据库配置)
- 0017 python django 06 继续 模型层 安装 python mariadb 驱动 配置Django 设置语言和时区 创建模型 生成迁移文件 运行数据库迁移
- Django项目实践(二)数据库配置和模型的创建
- 四十三、python学习之Django框架(三):数据库,数据库配置,定义模型,shell工具,数据库操作,查询集
- Django安装及数据库的相关配置
- Django 博客 - 2 创建数据库模型
- Django+mysql配置与简单操作数据库实例
- Django模型数据库
- 创建 Django 博客的数据库模型
- python例子-Django之模型(Model_数据库)
- Django数据库配置【models】
- 解决django使用模型无法创建数据库中表的问题
- Django项目实践3 - Django模型(字段、数据库操作及模型继承)
- Django blog - 03 -创建Django博客博客的数据库模型
- Django--数据库操作--ORM模型常用操作
- Django根据现有数据库,自动生成models模型文件
- django 模型model与数据库2——函数
- django 配置数据库
- Django 模型(数据库)
- Django--数据库的初步配置