# django_orm **Repository Path**: feng_dudu/django_orm ## Basic Information - **Project Name**: django_orm - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-16 - **Last Updated**: 2023-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 0 Django概述 Django采用MVC架构设计的开源的WEB快速开发框架。 **优点:** - MVC设计模式 - 大而全的重框架,自带ORM、Template、Form、Auth核心组件,快速开发 - 简洁的url设计 - 实用的管理后台Admin - 周边第三方插件丰富 **缺点:** - 框架重,什么都自己实现,囊括的东西太多了; - 同步阻塞-wsgi。但是3.0改为asgi了,开始支持异步非阻塞。 > ASGI(Asynchronous Server Gateway Interface, 异步服务器网关接口) 是WSGI的传人,为了规范支持异步的Python网络服务器,框架和应用之间的通信而定制。 相较于WSGI定义了同步的Python应用间的通信规范,ASGI同时囊括了同步和异步应用的通信规范,并且向后兼容遵循WSGI的应用、服务以及框架。详见[ASGI介绍。](https://blog.csdn.net/JosephThatwho/article/details/102756363?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169780759316800222877795%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169780759316800222877795&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-102756363-null-null.142^v96^pc_search_result_base8&utm_term=ASGI&spm=1018.2226.3001.4187) Django的设计目标就是一款大而全,便于企业快速开发项目的框架,因此企业应用较广。 > 没有哪个电商用Django的,大型电商主要还是java。Django主要还是企业级应用。 ## 1 项目准备 ### 1.1 创建test数据库,并导入数据,生成对应的表 - 登录数据库 - `create database salary`; - `use salary`; - 导入数据创建表:`source D:/Demo.sql;` ### 1.2 安装Django及驱动程序: **安装django:** `pip install Django==3.2.22` - 安装好后可使用命令:`django-admin.exe` **安装数据库驱动程序:**使用mysql数据库,`pip install pymysql` **django版本文档下载**: ![django版本文档下载](image/django版本文档下载.png) ### 1.3 创建项目 **创建salary的项目,指定项目名称和项目目录:** `django-admin.exe startproject salary .` 执行后项目目录结构: `--salary`:主目录,包含项目的各种配置,每一个文件都很重要 `--manage.py`:就相当于`django-admin.exe`,包含了项目需要的很多命令 `--app1`:待创建 `--app2`:待创建 **指定数据库驱动:** 在`settings.py`的同级目录的`__init__.py`中增加: ```python import pymysql pymysql.install_as_MySQLdb() ``` **创建应用程序APP`employee`**:`python manage.py startapp employee` ### 1.4 项目setting配置 **`settings.py`配置**: - 注册应用程序APP:`INSTALLED_APPS`中写入创建的`employee` - 配置数据库 - 配置时区 - 配置`logging`。注意生产环境中,`DEBUG=False` # https://docs.djangoproject.com/en/3.2/topics/logging/#configuring-logging **创建`employees`实体**: ```python from django.db import models class Employees(models.Model): # 数据库表名,固定的,Django就是这,一个Meta类 class Meta: db_table = "employees" emp_no = models.IntegerField(primary_key=True, null=False) birth_date = models.DateField(null=False) first_name = models.CharField(max_length=14, null=False) last_name = models.CharField(null=False, max_length=16) gender = models.SmallIntegerField(null=False) hire_date = models.DateField(null=False) def __repr__(self): return "".format(self.emp_no, self.first_name, self.last_name) ``` **生成迁移文件、创建表:** - 生成迁移文件:在项目根目录执行`python manage.py makeemigrations`,执行后在APP目录下可以看到`0001_initial.py` - 执行迁移文件创建表:`python manage.py migrate` > 迁移文件:第一次执行的时候生成0001号文件。第一次执行之后,如果models.py中的模型有修改,修改后重新执行迁移,则会在APP目录下创建一个补丁文件,代表有修改。 > 迁移还可以指定APP,仅对开发完成的APP做迁移:`python manage.py migrate employee` > 迁移前,一定要在`setting.py`的`INSTALLED_APPS`中注册APP。 > 对于执行过迁移的app,如果表建错了,想删了重新执行迁移,只删除创建的表没用。因为app的迁移记录保存在了`django_migrations`表中,如果表中这个app已经执行了0001号迁移,就不会执行。需要在`django_migrations`把app对于的迁移记录删除,然后再执行``python manage.py migrate app_name` **简单查询:** ```python #一-coding: utf-8-*- import os import django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'salary.settings') django.setup(set_prefix=False) from employee.models import Employee # 这一行必须在`os.environ.setdefault`之后,先把配置、环境变量准备好后才能import emps = Employee.objects.all() # 懒查询,只有后面对查询结构有引用时,才会驱动真正的查询 print(emps) # 查询集 ``` **Django ORM查询总结博客**:https://blog.csdn.net/luofeng_/article/details/133895120?spm=1001.2014.3001.5501