学习笔记,仅供参考


数据库的迁移

我在学习一对多映射时,由于操作不慎,导致报错频频,现在,我就来解决这个问题,顺便学习一下迁移操作。

现在,我在第7次迁移时出错了,它的错误是这样的:

pymysql.err.InternalError: (1054, "Unknown column 'pub' in 'china_publisher'")

报错信息显示,pub字段不在china_publisher表中。

我修改之后,还有一个报错,它是这样的:

django.db.utils.InternalError: (1366, "Incorrect integer value: '清华大学出版社' for column 'pub_id' at row 1")

错误太多,我也不知道该怎么办,所以我选择回到前几次迁移文件,重新开始。

看一下项目目录,方便后续理解:

目前,我在第7次迁移的位置,我想回到第1次迁移,那该咋整呢?

我们可以在cmd中敲入如下代码:

python manage.py migrate bookstore 0001

输出:

Operations to perform:Target specific migration: 0001_initial, from bookstore
Running migrations:Rendering model states... DONEUnapplying bookstore.0002_author... OK

这里,我从0007退到0005,发现Django还是可能会报错,就再退到0002,发现Django依然可能会报错,最后退到0001,也就是说我敲入了3次退回代码。上面显示的输出,是我从0002退回到0001的输出。

我们查看一下数据库:

mysql> show tables;
+----------------------------+
| Tables_in_mywebdb          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| bookstore_book             |
| china_publisher            |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
12 rows in set (0.00 sec)

此时的数据库应该没有china_publisher数据表,不知道哪里出错了,这种情况和Django在0001迁移文件里记录的情况完全不同,所以我果断将其删除!

mysql> drop table china_publisher;
Query OK, 0 rows affected (0.03 sec)

一般情况下,还是不要随便删表,要不然很容易出现混乱。

现在,我们把0001以上的记录文件全部删除:

并再次进行迁移操作

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py ma
kemigrations
Migrations for 'bookstore':bookstore\migrations\0002_auto_20200622_0213.py- Create model Author- Create model Publisher- Remove field pub from book- Add field exfacPrice to book- Add field price to book- Create model PartnerF:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py mi
grate
Operations to perform:Apply all migrations: admin, auth, bookstore, contenttypes, sessions
Running migrations:Applying bookstore.0002_auto_20200622_0213... OK

迁移成功!

查看一下数据表:

mysql> show tables;
+----------------------------+
| Tables_in_mywebdb          |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| bookstore_author           |
| bookstore_book             |
| bookstore_partner          |
| china_publisher            |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
14 rows in set (0.00 sec)mysql> select * from china_publisher;
Empty set (0.00 sec)mysql> select * from bookstore_book;
+----+-------------------+------------+-------+
| id | title             | exfacPrice | price |
+----+-------------------+------------+-------+
|  1 | Djangoweb开发实战 |       0.00 |  0.00 |
|  2 | python            |       0.00 |  0.00 |
|  3 | R                 |       0.00 |  0.00 |
|  5 | 算法              |       0.00 |  0.00 |
|  6 | 集体智慧编程      |       0.00 |  0.00 |
+----+-------------------+------------+-------+
5 rows in set (0.00 sec)

这时,我们在Book模型类中再加入一个字段pub,并与Publisher模型类进行一对多关联:

from django.db import models# Create your models here.class Publisher(models.Model):name = models.CharField("出版社名", max_length = 50,null = True)booknumber = models.PositiveIntegerField("初版书籍总量", default = 0)tele = models.CharField("联系电话", max_length = 11, null = False)class Meta:db_table = "china_publisher"verbose_name = "ChinaPublisher"verbose_name_plural  = "ChinaPublishers"def __str__(self):string = "出版社:%s" % (self.name)return stringclass Book(models.Model):title = models.CharField("书名", max_length = 30)exfacPrice = models.DecimalField("出厂价", max_digits = 6, decimal_places = 2,default = 0)price = models.DecimalField("售价", max_digits = 6, decimal_places = 2,default = 0)pub = models.ForeignKey(Publisher, on_delete = models.CASCADE , null=True)def __str__(self):string = "书名:%s" % (self.title) return stringclass Author(models.Model):name = models.CharField("姓名", max_length = 30, null = False, unique = True, db_index = True)age = models.IntegerField("年龄", null = False,default = 1)email = models.EmailField("邮箱", null = True)def __str__(self):string = "姓名:{}, 年龄:{}".format(self.name, self.age) return stringclass Partner(models.Model):'''作家伴侣模型类'''name = models.CharField("姓名", max_length=50)age = models.IntegerField("年龄", null = False,default = 1)author = models.OneToOneField(Author, on_delete = models.CASCADE)

再次执行迁移操作:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py makemigrations
Migrations for 'bookstore':bookstore\migrations\0003_book_pub.py- Add field pub to bookF:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_db>python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, bookstore, contenttypes, sessions
Running migrations:Applying bookstore.0003_book_pub... OK

迁移成功!

再次查看bookstore_book数据表:

mysql> select * from bookstore_book;
+----+-------------------+------------+-------+--------+
| id | title             | exfacPrice | price | pub_id |
+----+-------------------+------------+-------+--------+
|  1 | Djangoweb开发实战 |       0.00 |  0.00 |   NULL |
|  2 | python            |       0.00 |  0.00 |   NULL |
|  3 | R                 |       0.00 |  0.00 |   NULL |
|  5 | 算法              |       0.00 |  0.00 |   NULL |
|  6 | 集体智慧编程      |       0.00 |  0.00 |   NULL |
+----+-------------------+------------+-------+--------+
5 rows in set (0.00 sec)

Django(part33)--数据库的迁移相关推荐

  1. 使用south实现Django的数据库升级迁移

    Technorati 标签: django,south,数据库迁移 Ruby有牛哄哄的Rails Migration实现数据的升级和迁移,django呢? 有south. 已有的应用要支持south( ...

  2. Django数据库的迁移命令

    Django数据库的迁移命令 当模型类写好之后我们通常要进行数据库的迁移才能在数据库中创建表 生成迁移文件 python manage.py makemigrations 同步到数据库中 python ...

  3. 创建Django项目和模型(创建工程、子应用、设置pycharm环境、使用Django进行数据库开发的步骤)

    1.创建Django项目 文档:Writing your first Django app, part 1 | Django documentation | Django 步骤 创建Django项目 ...

  4. python3 django配置数据库(mysql)

    python3 django配置数据库(mysql)http://www.bieryun.com/3311.html python3 下的mysql驱动 django 连接mysql默认驱动是MySQ ...

  5. Django(part20)--数据库和模型

    学习笔记,仅供参考,有错必纠 文章目录 数据库和模型 Django下使用mysql数据库 安装pymysql包 创建和配置数据库 模型(Model) 模型概述 python数据库模型-Models 案 ...

  6. Django——创建数据库和表

    Django--创建数据库和表 Django拥有内置的ORM框架(object relational mapping),通过对象操作数据库. 模型是项目的数据来源,其中每一个模型都是一个python类 ...

  7. [Django ]Django 的数据库操作

    Django 的数据库操作 有之前的基础,那么我们就可以开始对数据库进行操作. 一.数据库配置 配置 MySql 在主目录的 settings.py 中修改 Python 1 2 3 4 5 6 7 ...

  8. Django 配置数据库相关

    一.在项目的setting.py文件中设置配置mysql数据库 Django项目创建后,会自动生成一个db.sqlite3,这也是一个数据库,不过它是文件型的.是Django中默认使用的数据库.如果我 ...

  9. django oracle数据库配置,django连接oracle时setting 配置方法

    下一步是将新创建的应用程序与项目相关联.为此,您需要编辑 myproj 文件夹中的 settings.py 文件,将字符串"myproj.myapp"追加到 INSTALLED_A ...

最新文章

  1. sql语句技巧,不敢独享,特此呈上
  2. 高速串行总线系列(1)8B/10B编码技术
  3. thinkphp-查询数据-基本查询
  4. 自定义动态注册广播和静态注册广播
  5. python批量解压文件_python 批量解压压缩文件的实例代码
  6. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码
  7. 数据库学习建议之提高数据库速度的十条建议
  8. Hbase RegionServer 宕机
  9. 《码出高效:Java 开发手册》技术笔记
  10. 百度网盘破解版,满速下载不限速【转载,亲测有效】
  11. 怎么把ide改成ahci_怎么改硬盘模式IDE,AHCI
  12. cad解除块的快捷命令_cad分解块的快捷命令
  13. Java可视化图像界面编程如何插入图片
  14. 51单片机学习笔记(郭天祥版)(5)——作业讲解、独立键盘、矩阵键盘
  15. 【汉字识别】基于matlab GUI汉字精准识别【含Matlab源码 2197期】
  16. OpenBmc开发5:bitbake介绍与使用
  17. Google翻译接口调用
  18. Python爬取LOL英雄皮肤
  19. 思维导图、流程图制作工具ProcessOn的使用
  20. BZOJ4622 [NOI 2003] 智破连环阵

热门文章

  1. 在mysql-workbench的存储过程中使用循环while,repeat,loop
  2. pynlpir(ICTCLAS)初步使用
  3. ORACLE IMP-00017: following statement failed with ORACLE error 6550
  4. java定时任务的两种实现方式
  5. Class类---反射学习笔记(一)
  6. 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
  7. 物联网有哪些技术 物联网跟云计算人工智能有什么关系
  8. 4.python合并excel多个sheet
  9. 解决SQL Server 2008安装时提示:重新启动计算机 失败
  10. Linux系统下Configure命令参数解释说明