我有一个女孩模特(我的意思是django =)
class Girl(models.Model):
id = models.AutoField(primary_key=True)
first_name = models.TextField()
last_name = models.TextField()
nickname = models.TextField(blank=True, null=True)
maiden_name = models.TextField(blank=True, null=
about = models.TextField(blank=True, null=True)
quotes = models.TextField(blank=True, null=True)
activities = models.TextField(blank=True, null=True)
books = models.TextField(blank=True, null=True)
games = models.TextField(blank=True, null=True)
tv = models.TextField(blank=True, null=True)
interests = models.TextField(blank=True, null=True)
movies = models.TextField(blank=True, null=True)
music = models.TextField(blank=True, null=True)
...
class Meta:
managed = True
db_table = 'girls'
故事:数据库是MariaDB + InnoDB,文本字段可能包含疯狂的大型unicode诗。 所以我很快遇到了这个问题http://instantbadger.blogspot.ru/2013/01/mysql-row-size-too-large-when-saving.html
问题:在MariDB中,没有办法通过变量(https://jira.mariadb.org/browse/MDEV-9646)为所有表指定默认的ROW_FORMAT
问题:如何在Meta或迁移文件本身中指定此选项以使django添加" ROW_FORMAT = COMPRESSED"最终的SQL?
答案 0 :(得分:3)
您可以在迁移文件中添加自定义SQL迁移操作,如下所示:
operations = [
...
migrations.RunSQL(""" YOUR SQL HERE """)
]
因为你想要的东西不能用Django原样完成,但你可以手动为改变表的迁移添加一行,如上所示。
请注意,这会降低您的项目的灵活性:如果您决定迁移到不支持该操作的存储后端,则您需要重写迁移。此外,当您更改模型时,更改不会反映在手写SQL中,这可能会破坏事物。说完这个,有时很难绕过手写的查询。
或者你可以写你自己的django包,将这个功能添加到模型的Meta中。这还需要编写自定义数据库后端,因为据我所知,不可能轻松地将自定义数据库操作添加到现有数据库后端。