Python3 Django的Model详解
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.youkuaiyun.com/Rozol/article/details/79526259
以下代码以Python3.6.1为例
Less is more!
Python 3.6.1
Django 1.8.2 (注: 由于2.0.2不支持mysql, 改用该版本)
MySQL 5.0.27
PyMySQL 0.8.0 (注: Django2推荐使用mysqlclient 1.3.7+, 该库要求python5.5-5.7 and Python2.7, 3.4+)(我装的是5.0的MySQL, 所以就没装推荐的)
项目名: Django_model 应用名: booktest
准备
- 更换成mysql数据库, 首先需要准备好数据库
- 安装数据库: 略
- 进入数据库:
mysql -uroot -p
- 创建数据库:
CREATE DATABASE test1 CHARSET=utf8;
更换数据库
-
虚拟环境中安装数据库MySQL:
pip install pymysql
-
在
Django_model[项目名]/Django_model/__init__py
中书写:import pymysql pymysql.install_as_MySQLdb()
-
-
修改
settings.py
文件DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # postgresql / mysql / sqlite3 / oracle 'NAME': 'model', # 数据库名 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'localhost', # 本地:localhost 'PORT': '3306', # 默认端口:3306 } }
Model使用流程
- 创建应用
python manage.py startapp [应用名]
settings.py
中的 INSTALLED_APPS = [] 添加应用- models.py定义模型类
- 生成迁移
python manage.py makemigrations
- 执行迁移
python manage.py migrate
- 使用模型
字段
from django.db import models
'''
A. 属性的类型决定了:
1. 数据库中字段的类型
2. 管理表单时使用的html控件
3. 管理中的数据验证
B. Django会自动生成自增长id
'''
'''
字段类型:
AutoField: 无需指定, 自增长id
BooleanField: Boolean类型, 默认Flase; 表单控件: CheckboxInput
NullBooleanField; Boolean类型, 支持None, True, False
CharField(max_length=字符长度20): 字符串; 表单控件: TextInput
TextField: 大文本; 表单控件: Textarea
IntegerField:整数
FloatField: 浮点数
DecimalField(max_digits=位数总数None, decimal_places=小数点后的数字位数None): Decimal的十进制浮点数
DateTimeField([auto_now=修改时间戳False, auto_now_add=创建时间戳False]): datetime.datetime实例的日期和时间; 表单控件: TextInput + 日历控件
DateField: datetime.date实例的日期
TimeField: datetime.time实例的时间
FileField: 上传文件(非路径)
ImageField:上传image
'''
'''
字段选项:
null: True:允许None; 默认:False
blank: True:允许空白; 默认:False
db_column: 字段名; 默认:属性名
db_index: True:创建索引; 默认:False
default: 默认值
primary_key: True:主键
unique: True:值唯一
'''
'''
关系:
ForeignKey: 一对多, 将该属性定义到多的那一端
OneToOneField: 一对一, 将该属性定义到任一端
ManyToManyField: 多对多, 将该属性定义到两端
递归关联(自连接/自关联): 一对多, 用一张表存储所有信息
访问:
BookshelfInfo
BookInfo
bookshelf = models.ForeignKey(Bookshelf)
用一访问多:
对象.模型类_set
bookshelf.bookinfo_set
用一访问一:
对象.模型类
book.bookshelfinfo
访问id:
对象.属性_id
book.bookshelf_id
使用例子:
bookshelf = Bookshelf.objects.get(pk=1) # 查询指定书架
bookshelf.bookinfo_set.all() # 获取该书架所有的书信息
'''
class Bookshelf(models.Model