您的位置:首页 > 数据库

Django模型数据库配置

2020-04-23 09:10 831 查看

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)
>>>
  • 点赞
  • 收藏
  • 分享
  • 文章举报
WendyZJH 发布了9 篇原创文章 · 获赞 0 · 访问量 434 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: