一、ORM介绍
- ORM概念
对象关系映射(ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用对象和数据库之间映射的元数据,将程序的对象自动持久化到关系数据库中。ORM在业务逻辑层面和数据库层之间充当了桥梁的作用
-
ORM由来
几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。
-
ORM优势
ORM解决的主要问题是对象和关系的映射。它通常把一个类和一个表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。ORM提供了对数据库的映射,不用直接编写SQL代码,只需要像操作对象一样从数据库操作数据。
-
ORM的劣势
ORM的缺点是会在一定程度上牺牲程序的执行效率。ORM用多了SQL语句就不会写了,关系数据库相关技能退化。
-
ORM总结
ORM只是一种工具,工具确实能解决一些重复,简单的劳动。
二、Django中的ORM
1.使用MySQL数据库
-
Django通过pymysql操作底层mysqld
#站点下__init__.py 文件添加以下内容 import pymysql pymysql.install_as_MySQLdb()
- settings.py文件中配置数据库连接信息
# 将默认的DATABASES连接信息注释替换成以下连接信息 DATABASES = { 'default': { 'ENGINE':'django.db.backends.mysql', 'NAME':'s1bms', 'USER':'app', 'PASSWORD':'Aa123456', 'HOST':'47.192.214.121', 'PORT':63306, } }
2.通过面向对象修改数据库结构
- 在应用app目录下修改models.py文件
from django.db import models # Create your models here. class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8, decimal_places=2) publish = models.CharField(max_length=32) pub_date = models.DateField() class Meta: db_table="book"
3.执行脚本命令
- 生成migrations文件,Terminal脚本执行如下操作:
(venv) E:\python_study\mhsite02>python manage.py makemigrations Migrations for 'app01': app01\migrations\0001_initial.py - Create model Book # 在migrations中能够看到有生成0001_initial.py文件
- 迁移数据库
(venv) E:\python_study\mhsite02>python manage.py migrate Operations to perform: Apply all migrations: admin, app01, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying app01.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK
4.验证数据库结构
MySQL [s1bms]> desc book;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(32) | NO | | NULL | |
| price | decimal(8,2) | NO | | NULL | |
| publish | varchar(32) | NO | | NULL | |
| pub_date | date | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
三、ORM常用字段和参数
- AutoField int自增列,必须天然参数primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列
- IntegerField 一个整数类型,范围在-2147483648 to 2147483647。
- CharField 字符类型,必须提供max_length参数,max_length表示字符长度。
- DateField 日期自动,日期格式YYYY-MM-DD
- DateTimeField 日期时间字段,格式YYYY-MM-DD HH:MM:ss
留言