使用迁移注释生成create table sql

时间:2016-08-20 19:14:15

标签: python django

我搜索过Django的文档,但是我无法找到有关向Django的makemigrationsmigrate命令生成的sql添加注释的任何信息。

有什么方法可以像这样生成sql。因为我的大学坚持认为他可以在不阅读我的代码但使用SHOW CREATE TABLE语法的情况下知道该字段的含义。 他正在开发另一个只需要从同一个数据库中读取数据的项目。

CREATE TABLE `gateway_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,  /* Order id */
  `updated_datetime` datetime NOT NULL,  /* Latest update time of order */
  `created_datetime` datetime NOT NULL,  /* Created time of order */
  `product_name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=34848 DEFAULT CHARSET=utf8;

2 个答案:

答案 0 :(得分:0)

我只是在寻找一种方法在Django中做这样的事情,但发现Django没有并且不会有这个功能:参见:https://code.djangoproject.com/ticket/13867

所以只需使用以下命令输出Django生成的SQL。

python manage.py sqlmigrate app 0001 > app001.sql

然后,编辑app001.sql为SQL语句添加注释,如下所示:

CREATE TABLE `gateway_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT "Order id",
  `updated_datetime` datetime NOT NULL COMMENT "Latest update time of order",
  `created_datetime` datetime NOT NULL COMMENT "Created time of order",
  `product_name` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=34848 DEFAULT CHARSET=utf8;

然后将SQL导入数据库。

mysql -h127.0.0.1 -uroot -p --database yourdb < app001.sql

并运行

python manage.py migrate app --fake

告诉Django,你已经在数据库中创建了SQL。

如果找到更好的方法,请告诉我。

答案 1 :(得分:0)

我已经answered in a similar question

  • 门票#13867现在已被#18468“取代”,{<3>重新打开了,现在被接受并正在等待补丁。

  • 针对PostgreSQL数据库的部分解决方案作为迁移后的钩子Django应用程序发布于https://github.com/vanadium23/django-db-comments。应该不难为MySQL数据库调整它。