目录
一、ORM (对象关系映射 Object Relational Mapping)
1-3 migrations 内 __init__.py文件修改
1、在py文件中调用Django环境(可用于orm记录操作语言的测试)
- values(*field):返回特殊的queryset类型
一、ORM (对象关系映射 Object Relational Mapping)
介绍:对pymysql模块的二次封装,进行操作mysql
优点:
- 提高了开发效率
- 可以使用代码创建表、并对表进行增删改查操作
缺点:
- 降低了执行效率
- 不可以自主创造数据库
二、表结构的创建和修改
1、表结构的创建
1-1 setting内建立数据库连接
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'lqz', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, 'ATOMIC_REQUEST': True, 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } } } ''' 'NAME':要连接的数据库,连接前需要创建好 'USER':连接数据库的用户名 'PASSWORD':连接数据库的密码 'HOST':连接主机,默认本机 'PORT':端口 默认3306 'ATOMIC_REQUEST': True, 设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。 是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 'OPTIONS': { "init_command": "SET storage_engine=MyISAM", } 设置创建表的存储引擎为MyISAM,INNODB '''
1-2 models.py 内创建模型
from django.db import models # 一个类就是一个表 class User(models.Model): # 自增int类型,是主键 id = models.AutoField(primary_key=True) # name 是一个varchar类型,长度是32 name = models.CharField(max_length=32) pwd = models.CharField(max_length=32)
1-3 项目 内 __init__.py文件修改
注意:
- 若只是在app文件夹下的init文件添加,则只能当前app内使用mysqldb
- 若在总项目文件夹下的init文件中添加,所有app的数据库都使用mysqldb
import pymysql pymysql.install_as_MySQLdb()
1-4 迁移命令的两种执行方式
- 方式一、终端命令
python3 manage.py makemigrations --- 记录数据库的修改记录
python3 manage.py migrate ---- 数据修改同步数据库- 方式二、pycharm工具栏操作
工具栏 -- tools--->Run manage.py Task
makemigrations
migrate- 注意:
1 数据库迁移记录都在 app01下的migrations里
2 使用showmigrations命令可以查看没有执行migrate的文件(python manage.py showmigrations)
3 makemigrations是生成一个文件,migrate是将更改提交到数据量
2、表结构的修改
2-1 增加字段
from django.db import models # 一个类就是一个表 class User(models.Model): # 自增int类型,是主键 id = models.AutoField(primary_key=True) # name 是一个varchar类型,长度是32 name = models.CharField(max_length=32) pwd = models.CharField(max_length=32) # 在原有结构上添加字段,必须带有默认值 phone=models.CharField(max_length=64,default='120')
2-2 删除字段
from django.db import models # 一个类就是一个表 class User(models.Model): # 自增int类型,是主键 id = models.AutoField(primary_key=True) # name 是一个varchar类型,长度是32 name = models.CharField(max_length=32) pwd = models.CharField(max_length=32) # 在原有结构上注释字段 # phone=models.CharField(max_length=64,default='120') ''' 文件修改完成,执行两句迁移命令 '''
2-3 修改字段
from django.db import models # 一个类就是一个表 class User(models.Model): # 自增int类型,是主键 id = models.AutoField(primary_key=True) # name 是一个varchar类型,长度是32 name = models.CharField(max_length=32) pwd = models.CharField(max_length=32) # 在原有结构上修改结构内容 phone=models.CharField(max_length=64,default='11111111111') ''' 文件修改完成,执行两句迁移命令 '''
3、模型内字段类型
- AutoField(Field) - int自增列,必须填入参数 primary_key=True
- BigAutoField(AutoField) - bigint自增列,必须填入参数 primary_key=True
//注:当model中如果没有自增列,则自动会创建一个列名为id的列 from django.db import models class UserInfo(models.Model): # 自动创建一个列名为id的且为自增的整数列 username = models.CharField(max_length=32) class Group(models.Model): # 自定义自增列 nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32)
mallIntegerField(IntegerField): - 小整数 -32768 ~ 32767
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) - 正小整数 0 ~ 32767