gpt4 book ai didi

mysql - 如何控制Django migrate创建的表名

转载 作者:可可西里 更新时间:2023-11-01 07:14:39 26 4
gpt4 key购买 nike

上下文: Django 1.7;MySQL 5.6.23;在 AWS 上运行(不确定确切的 Linux 操作系统版本)

我有一个 Django 1.7 项目。当我执行初始 makemigrations 以在我的 Windows 笔记本电脑上本地构建我的数据库时,我得到的表以我的应用程序名称为前缀,如下所示:

myapp_person (for Django class Person(models.Model))

myapp_personmap (for Django class PersonMap(models.Model))

当我进行迁移并迁移到 AWS Linux 服务器时,表的名称如下:

MyApp_person

MyApp_personmap

请注意应用名称前缀的意外 CamelCase 和其余表名称的预期小写。

我的问题:

  1. 什么控制表的 appname 前缀(例如“myapp_person”中的“myapp_”)?
  2. 如何让迁移在 AWS 上像在本地 Windows 笔记本电脑上一样使用所有小写字母?

最佳答案

要使用您自己的自定义表名,您需要在您的模型 Meta 选项中定义一个 db_table 参数。

来自 table names: 上的 Django 文档

To override the database table name, use the db_table parameter in class Meta.

查询 1:应用名称前缀由什么控制?

如果您没有在模型的 Meta 类中定义 db_table 选项,那么 Django 会使用 app 标签 和模型的类名。

来自official docs :

Django automatically derives the name of the database table from the name of your model class and the app that contains it. A model’s database table name is constructed by joining the model’s “app label” – the name you used in manage.py startappto the model’s class name, with an underscore between them.

例如:

如果您有一个由 manage.py startapp xyz 创建的应用 xyz,定义为类 Abc 的模型将有一个名为作为 xyz_abc

查询 2:使用自定义表名创建表

如果你想使用自定义表名,那么你需要在你的模型 Meta 中使用 db_table 选项。

在这里,您可以明确定义小写的数据库表名称。

class Person(models.Model):

class Meta:
db_table = '"myapp_person"' # define your custom name

class PersonMap(models.Model):

class Meta:
db_table = '"myapp_personmap"' # define your custom name

关于mysql - 如何控制Django migrate创建的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com