数据库开发-Django ORM的数据库迁移

                                      作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一. Django 项目准备

1>.安装django包

  pip install django=2.2.7

  除了使用pip安装之外,还可以从网上下载Django的压缩包自行安装。在浏览器上输入下载地址:“https://www.lfd.uci.edu/~gohlke/pythonlibs/#sendkeys”,找到如下图所示对应的Django版本下载到本地后,执行“pip install  你下载的Django软件的本地存放路径"(例如:[pip install  C:\Users\yinzhengjie\softwares\Django‑2.1.4‑py3‑none‑any.whl])

  验证django是否安装成功

import django        #导入django模块

django.__version__     #查看django的版本 

2>.项目准备

django-admin startproject salary .        #在当前目录下创建一个叫salary的项目

./manage.py startapp employee          #使用上面命令生成的管理脚本"manage.py"来创建应用

3>.打开salary/settings.py主配置文件修改数据库相关的配置

"""
Django settings for salary project. Generated by 'django-admin startproject' using Django 2.2.7. For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/ For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
""" import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'dbeqm&74uxuz(@#7)+cau6x$&3&3t6lq9q4iqjo=o92k0jv6^8' # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
},
},
} ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'employee'
] MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ROOT_URLCONF = 'salary.urls' TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
] WSGI_APPLICATION = 'salary.wsgi.application' # Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'school',
'USER': 'jason',
'PASSWORD': 'yinzhengjie',
'HOST': '172.30.1.101',
'PORT': '',
}
} # Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
] # Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/ LANGUAGE_CODE = 'zh-hans' TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/'

salary/settings.py文件内容戳这里

  注册应用:

  数据库配置:

  时区配置:

  配置Django的日志级别:

4>.Python支持的MySQL驱动

  使用过Django1.11.x的小伙伴应该知道,由于Django默认是使用MySQLDB数据库驱动连接MySQL,不过该驱动不支持python 3.x版本。因此我们可以使用pymysql来代替默认的MySQLDB,编辑根项目路径下的"__init__.py",添加如下图所示的内容即可。

  本篇博客使用的是Django 2.2.x版本,该版本Django默认使用的是mysqlclient(在MySQLdb的基础上,增加了对Python 3的支持)驱动,因此无需做其他配置,只需要安装mysqlclient对应的模块即可。

二.数据库迁移

1>.编写Model类

 from django.db import models

 # Create your models here.
from django.db import models
class Employee(models.Model):
class Meta:
db_table = 'employees' emp_no = models.IntegerField(primary_key=True)
birth_date = models.DateField(null=False)
first_name = models.CharField(null=False, max_length=14)
last_name = models.CharField(null=False, max_length=16)
gender = models.SmallIntegerField(null=False)
hire_date = models.DateField(null=False) def __repr__(self):
return "<Employee: {} {} {}>".format(
self.emp_no,
self.first_name,
self.last_name
) __str__ = __repr__

employee.models.py文件内容

2>.创建表

 python manage.py makemigrations      #将应用中的models.py文件中的更改生成文件并保存到同级目录(migrations)下,默认命名为:"0001_initail.py"

python manage.py migrate      #将上一步migrations目录下生成的"00001_initial.py"文件(里面记录了model.py文件的改动)同步到数据库并生成相应的表。

3>.删除表

python manage.py makemigrations          #将上面的models.py文件代码注释掉后,执行该代码会在migrations目录生成一个文件,如下图所示。

python manage.py migrate        #将修改同步到数据库中,发现数据库中表被删除了,如下图所示。

数据库开发-Django ORM的数据库迁移的更多相关文章

  1. 数据库开发-Django ORM的多对多查询

    数据库开发-Django ORM的多对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...

  2. 数据库开发-Django ORM的一对多查询

    数据库开发-Django ORM的一对多查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.联合主键问题 CREATE TABLE `employees` ( `emp_no` ...

  3. 数据库开发-Django ORM的单表查询

    数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...

  4. Django学习——静态文件配置、request对象方法、pycharm如何链接数据库、Django如何指定数据库、Django orm操作

    静态文件配置 # 1.静态文件 网站所使用的已经提前写好的文件 css文件 js文件 img文件 第三方文件 我们在存储静态文件资源的时候一般默认都是放在static文件夹下 # 2.Django静态 ...

  5. django ORM创建数据库方法

    1.指定连接pymysql(python3.x) 先配置_init_.py import pymysql pymysql.install_as_MySQLdb() 2.配置连接mysql文件信息 se ...

  6. 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加

    认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...

  7. Django ORM创建数据库

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  8. Python Django orm操作数据库笔记之QuerySet API

    什么时候Django会将QuerySet转换为SQL去执行: 根据Django的数据库机制,对于QuerySet来说,当QuerySet被第一次构建,然后又调用他的filter方法,接着在对其进行切片 ...

  9. Python Django orm操作数据库笔记之外键和表关系

    外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的. 外键的使用 使用外键前需要先确保相应外键已存储在数据库中(flask中 ...

随机推荐

  1. iOS - 判断程序每天只执行一次

    当进行操作的时候记录操作时间存在偏好设置当中,当再次点击的时候获取现在的时间然后和之前记录的时间进行比较.如果是一天那么就提示“今天已经操作过了”,如果不是一天,那么可以正常操作,然后记录操作时间.如 ...

  2. 【记录】【MySQL】拼接字符串函数 CONCAT(str1,str2)

    CONCAT(str1,str2) 就是把str1和str2拼接

  3. SQL Server MERGE(合并)语句

    如何使用SQL Server MERGE语句基于与另一个表匹配的值来更新表中的数据.  SQL Server MERGE语句 假设有两个表,分别称为源表和目标表,并且需要根据与源表匹配的值来更新目标表 ...

  4. pat 1100

    1100 Mars Numbers (20 分)   People on Mars count their numbers with base 13: Zero on Earth is called ...

  5. LeetCode 1046. 最后一块石头的重量(1046. Last Stone Weight) 50

    1046. 最后一块石头的重量 1046. Last Stone Weight 题目描述 每日一算法2019/6/22Day 50LeetCode1046. Last Stone Weight Jav ...

  6. SQL Server 数据库启动过程,以及启动不起来的各种问题的分析及解决技巧

    目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表.存储过程. ...

  7. autocomplete undefined一例解决办法

    项目中一个页面jqueryui与extjs混用.当使用autocomplete时,会报undefined. 解决办法增加 var jq = jQuery.noConflict(true); 然后使用j ...

  8. Python实现斐波那契递归和尾递归计算

    ##斐波那契递归测试 def fibonacciRecursive(deepth): if deepth == 1: return 1 elif deepth == 2: return 1 else: ...

  9. LeetCode runtime error

    今天在写LeetCode的某一道题目时候,遇到runtime error问题,本地能过,submit后死活不能通过. 查了一下网上的一些答案,基本上都是数组.指针没有初始化造成野指针.数组索引值越界. ...

  10. arc079

    D. Decrease (Contestant ver.) 大意: 每次操作选一个最大数$-n$,其余数全$+1$. 要求构造一个序列$a$, 使得恰好$k$次操作后最大值不超过$n-1$. 只要让$ ...