创建models.py时发现row size太大问题,如何解决
Posted
技术标签:
【中文标题】创建models.py时发现row size太大问题,如何解决【英文标题】:When creating models.py ,the row size too large issue is found ,how to solve this problem 【发布时间】:2020-03-16 01:15:37 【问题描述】:如何解决这个问题:
引发 errorclass(errno, errval) django.db.utils.InternalError: (1118, u'行大小太大。使用的表类型的最大行大小, 不计算 BLOB,是 65535。这包括存储开销,请检查 手册。您必须将某些列更改为 TEXT 或 BLOB')
请帮忙解决这个问题,下面是模型代码:
from django.db import models
class Newsdeatils(models.Model):
news_provider_id = models.CharField(max_length=5000)
news_title = models.CharField(max_length=5000)
news_details = models.CharField(max_length=5000)
news_image = models.CharField(max_length=5000)
news_page_url = models.CharField(max_length=5000)
next_page = models.CharField(max_length=5000)
news_des = models.CharField(max_length=5000)
【问题讨论】:
为什么要这么多最大长度?如果你有更多的字符,最好添加 TextFiled 【参考方案1】:对于这样的长度要求,只需使用TextField。
通常,TextFields 并没有真正限制到特定的长度 w.r.t。实现限制(关于文件系统或使用的通用数据库系统)。 TextFields
的行为与 CharFields
in 用法非常相似。
您可以阅读 here 的差异。
你的代码会变成这样:
from django.db import models
class Newsdeatils(models.Model):
news_provider_id = models.TextField(max_length=5000)
news_title = models.TextField(max_length=5000)
news_details = models.TextField(max_length=5000)
news_image = models.TextField(max_length=5000)
news_page_url = models.TextField(max_length=5000)
next_page = models.TextField(max_length=5000)
news_des = models.TextField(max_length=5000)
请注意,不需要在TextField
上设置max_length
属性(使用CharField
时需要)。这个max_length
属性也不是在数据库级别上强制执行的,而是仅用于表单验证。
您的模型中需要考虑的其他事项:
为什么news_provider_id
是CharField
?那不应该是ForeignKey
吗?
news_image
字段也是如此。这应该是BinaryField
。
【讨论】:
当我应用时,news_provider_id = models.TextFiled(max_length = 5000),AttributeError: 'module' object has no attribute 'TextFiled'。问题就形成了 因为它拼写为“TextField”而不是“TextFiled”。您的型号名称中可能还有拼写错误,应该是“Newsdetail”而不是“Newsdeatils”。此外,如果这解决了您的问题,请考虑接受此答案。 然后也形成了同样的问题,文件“/home/prvak/Documents/duklr/venv/local/lib/python2.7/site-packages/pymysql/err.py”,第109行,在 raise_mysql_exception raise errorclass(errno, errval) django.db.utils.InternalError: (1118, u'Row size too large. 使用的表类型的最大行大小,不包括 BLOB,是 65535。这包括存储开销,检查手册。你必须将一些列更改为 TEXT 或 BLOBs')在这里我安装 pip install pymysql,你能帮我解决这个问题吗 我不确定这是否与您发布的模型有关。如果您将所有 CharFields 更改为 TextFields,则不应发生这种情况。是否有其他模型使用具有如此高 max_length 属性的 CharFields?另外,这个错误什么时候发生?更改为 TextFields 后是否运行 manager.py makemigrations && migrate?以上是关于创建models.py时发现row size太大问题,如何解决的主要内容,如果未能解决你的问题,请参考以下文章