zoukankan      html  css  js  c++  java
  • 记一次痛苦的Django报错调试经历:

    开发的程序在我的本地mac上,ubuntu上,以及树莓派上都成功实现了迁移和运行,但是当准备将运行好好地程序迁移到阿里云的服务器上的mysql数据库上时,出现了非常多的幺蛾子的问题。

    具体如下:

    初始化连接,执行python manage.py makemigrations; python manage.py migrate 生成部分表格(不全),报错。报错信息如下:

    Specified key was too long; max key length is 767 bytes

    由于所有的报错信息都是django的内部信息,无法判断具体错误在哪一段代码上。在网上找了各种资料,mysql版本等多种问题均未不是我想要的解决方案,因为本身确认没问题。

    又遇上了Django从1.11.7升级到2.0的情况,看谁都像坏人。只能耐心地将django版本库升级到最新版后,将系统跑起来。在树莓派上测试还是ok,阿里云还是死。。。

    后面又是逐步调整,把可能的所有的对象都搞了一遍,没有定位到错误。最后选择新建一个新的django项目,将models中的表一张张移过来,马上发现varchar(256)改成255后就可以成功运行了。终于找到了问题所在。后面就是调试定位具体的原因。

    下面的代码是models.py中的两个varchar(256)的表。

    from django.db import models
    
    # Create your models here.
    
    
    class Company(models.Model):
        '''公司表'''
        company_name=models.CharField(max_length=256,verbose_name='公司名称')
        industry=models.CharField(max_length=32,verbose_name='所属行业',blank=True,null=True)
        department=models.CharField(max_length=32,verbose_name='所属部门',blank=True,null=True)
    
        def __str__(self):
            return self.company_name
    
        class Meta:
            verbose_name='公司表'
            verbose_name_plural='公司表'
    
    
    class Tags(models.Model):
        '''标签表'''
        tag_name=models.CharField(max_length=256,verbose_name='标签名称')
        shadow_mark_id=models.IntegerField(verbose_name='影子标签',blank=True,null=True)
        node_ancestor=models.ForeignKey('self',verbose_name='父节点',blank=True,null=True,on_delete=True)
    
        def __str__(self):
            return self.tag_name
    
        class Meta:
            unique_together=('tag_name','node_ancestor')
            verbose_name='标签表'
            verbose_name_plural='标签表'

    逐步调整,最终发现,Company表中的varchar(256)也不会出错。最后的原因在于在Tags中,tag_name这个字段做了一个联合唯一, 阿里云对mysql索引做了限制,索引的长度不能超过255。

    这就是一个字引发的血案。

  • 相关阅读:
    VS2008 环境中完美搭建 Qt 4.7.4 静态编译的调试与发布 Inchroy's Blog 博客频道 CSDN.NET
    编写可丢弃的代码
    c++ using namespace std; 海明威 博客园
    解决MySQL server has gone away
    nginx upstream 调度策略
    (2006, 'MySQL server has gone away') 错误解决 dba007的空间 51CTO技术博客
    Linux IO模型漫谈(2) 轩脉刃 博客园
    redis源码笔记 initServer 刘浩de技术博客 博客园
    MySQLdb批量插入数据
    词库的扩充百度百科的抓取你知道这些热词吗? rabbit9898 ITeye技术网站
  • 原文地址:https://www.cnblogs.com/zoe233/p/8253110.html
Copyright © 2011-2022 走看看