阅读目录(Content)
- 四、关系字段
-
七、浅谈ORM查询性能
-
八、分组和聚合查询
-
九、F查询与Q查询
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用
二 Django连接MySQL
1.创建数据库(注意设置 数据库的字符编码)
create database student default character set utf8 collate utf8_general_ci;
2.修改project中的settings.py文件中的设置 连接MySQL数据库(Django默认使用的是sqllite数据库)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'student',
'USER': 'root',
'PASSWORD': '123123',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
扩展:查看ORM操作执行原生的SQL语句
在project中的settings.py文件增加
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level':'DEBUG',
},
}
}
3、修改project 中的__init__py 文件设置 Django默认连接MySQL的方式
import pymysql pymysql.install_as_MySQLdb()
4、setings文件注册APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
5、models.py创建表
class Publisher(models.Model):
id = models.AutoField(primary_key=True)
publishName = models.CharField(max_length=32)
address = models.CharField(max_length=32)
6、进行数据迁移
6.1、在 winds cmd 或者 PyCharm Terminal 的项目的manage.py目录下执行
python manage.py makemigrations python manage.py migrate
扩展:修改表之后常见‘ 报错 ’
You are trying to add a non-nullable field 'tele' to publisher without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 2) Quit, and let me add a default in models.py Select an option:
这个报错:因为表创建好之后,新增字段没有设置默认值,或者原来表中字段设置了不能为空参数,修改后的表结构和目前的数据冲突导致;
三、modles.py创建表
ORM字段介绍
Django提供了很多字段类型,比如URL/Email/IP/ 但是mysql数据没有这些类型,这类型存储到数据库上本质是字符串数据类型,其主要目的是为了封装底层SQL语句;
常用字段
1 AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
2 IntegerField
一个整数类型,范围在 -2147483648 to 2147483647
3 CharField
字符类型,必须提供max_length参数, max_length表示字符长度。
4 DateField
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
5 DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例
细分
1.字符串类(以下都是在数据库中本质都是字符串数据类型,此类字段只是在Django自带的admin中生效)
class Publisher(models.Model): id = models.AutoField(primary_key=True) publishName = models.CharField(max_length=32) address = models.CharField(max_length=32) tele = models.CharField(max_length=32)