一、ORM介绍
orm其实就是对象关系映射,内部ORM 将其转化成对应SQL语句再去执行
映射关系:
表名 --------------------》类名
字段--------------------》属性
表记录-----------------》类实例化对象
开发者通过操作类和对象,内部
ORM的两大功能:
操作表:
- 创建表
- 修改表
- 删除表
操作数据行:
- 增删改查
其实用django实现的models文件就是底层调用了pymysql这个模块
ORM利用pymysql第三方工具链接数据库
Django没办法帮我们创建数据库,只能我们创建完之后告诉它,让django去链接
创建表之前的准备工作
一、自己创建数据库
二、在settings里面配置mysql数据库链接
sqlite3------改为mysql
你的django再创建的时候执行完settings后还会执行你创建的app中的init文件 你再在你的app文件中的init中导入pymsql
在setting中更改导入的信息先注释DATABSE再导入下面的信息
# DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'db5', # 要连接的数据库,连接前需要创建好 'USER':'root', # 连接数据库的用户名 'PASSWORD':'zhaoyun', # 连接数据库的密码 'HOST':'127.0.0.1', # 连接主机,默认本级 'PORT':3306 # 端口 默认3306 } }
因为我们用的是python3版本的解释器 ,默认是支持python2的解释器
然后再去你的app下的init文件中导入信息:
import pymysql pymysql.install_as_MySQLdb()
再去创建的app中的models中设置你的sql信息
from django.db import models # Create your models here. class Book(models.Model): nid = models.AutoField(primary_key = True) #括号内是设置主键 这是设置一个int类型的 title = models.CharField(max_length = 32,unique=True) # 设置一个var类型的 这里面是最大字符的 并且设置唯一 pricle = models.DecimalField(max_digits = 8,decimal_places=2)# 999999.99 publish = models.CharField(max_length=32) # 设置最大字符
执行命令创建:(需要记住的!!!)
python3 manage.py makemigrations 创建脚本 python3 manage.py migrate 迁移
这两个语句在你的pycharm的下面
这里执行
也可以点击pycharm的Tools然后选择 Run manage.py make 然后直接输入makemigrations 和migrate 即可
在下部依次输入执行:
makemigrations
migrate
更多字段:


''' <1> CharField 字符串字段, 用于较短的字符串. CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许的最大字符数. <2> IntegerField #用于保存一个整数. <3> FloatField 一个浮点数. 必须 提供两个参数: 参数 描述 max_digits 总位数(不包括小数点和符号) decimal_places 小数位数 举例来说, 要保存最大值为 999 (小数点后保存2位),你要这样定义字段: models.FloatField(..., max_digits=5, decimal_places=2) 要保存最大值一百万(小数点后保存10位)的话,你要这样定义: models.FloatField(..., max_digits=19, decimal_places=10) admin 用一个文本框()表示该字段保存的数据. <4> AutoField 一个 IntegerField, 添加记录时它会自动增长. 你通常不需要直接使用这个字段; 自定义一个主键:my_id=models.AutoField(primary_key=True) 如果你不指定主键的话,系统会自动添加一个主键字段到你的 model. <5> BooleanField A true/false field. admin 用 checkbox 来表示此类字段. <6> TextField 一个容量很大的文本字段. admin 用一个 '''
更多参数:


(1)null 如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False. (1)blank 如果为True,该字段允许不填。默认为False。 要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。 如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。 (2)default 字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。 (3)primary_key 如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True, Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为, 否则没必要设置任何一个字段的primary_key=True。 (4)unique 如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的 (5)choices 由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,
而且这个选择框的选项就是choices 中的选项。
orm中的你的对象的操作就是对应你的sql的语句想要显示你的 sql的语句的演示你需要再你的settings里面加上一段话
: 如果想打印orm转换过程中的sql,需要在settings中进行如下配置:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }