【问题标题】:Django Migration-SQL ServerDjango 迁移-SQL Server
【发布时间】:2015-01-05 04:04:34
【问题描述】:

我正在学习 Django,我已经在 App Book 中创建了一个模型

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    read = models.CharField(max_length=50)

现在我想在

的帮助下生成它的对应SQL语句
python manage.py sql books

但它显示错误

CommandError:应用“图书”已迁移。应用有迁移时,只能使用 sqlmigrate 和 sqlflush 命令。

我使用了makemigrartionmigrate 命令,它显示没有剩余迁移。

任何人都可以对这个错误有任何想法吗?

【问题讨论】:

  • 你要什么sql? select 语句还是 create 语句?也很好奇为什么。

标签: python django django-forms


【解决方案1】:

由于与 django 1.6 及以下版本仍有一点向后兼容性,您仍然可以使用 django-admin 的 sql 命令。但是,您必须先删除迁移文件夹。

要获取创建语句,您需要删除迁移文件夹

rm -rf books/migrations

然后就可以运行sql语句了

./manage.py sql books

应该给你这样的东西:

BEGIN;
CREATE TABLE "books_book" (
    "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
    "title" varchar(100) NOT NULL,
    "author" varchar(50) NOT NULL,
    "read" varchar(50) NOT NULL
)
;

COMMIT;

但是,如果您追求的是 select 语句。添加回您的迁移文件夹:

mkdir books/migrations/

然后进行创建迁移和迁移命令。

从那里打开外壳:

./manage.py shell

您可以在 shell 中创建查询集并打印查询:

from books.models import Book
print Book.objects.all().query

你应该得到这样的输出:

SELECT "book_book"."id", "book_book"."title", "book_book"."author", "book_book"."read" FROM "book_book"

这些是恢复 sql 的几种方法,具体取决于您要生成的内容。 shell 中查询集的好处是您可以使其尽可能复杂,并打印 .query 并将其提供给您。

【讨论】:

    【解决方案2】:

    嗯,有趣。目前,有两种方法可以将模型转换为 SQL。旧的 syncdb 方法(最终将被删除)和新的迁移方法。旧的sql* 命令基于第一种方法,通常不会以与迁移方法相同的方式工作。所以我认为这是一个技术限制(尽管可能也是哲学限制)。

    完成此操作的最佳方法可能是首先 squash 进行迁移(在大多数情况下,这应该生成一个迁移文件),然后使用 sqlmigrate 命令为新的迁移生成 SQL。

    【讨论】:

      【解决方案3】:

      在应用程序内部,将有一个迁移目录,django 会将您的模型更改存储为迁移文件。

      要查看查询,您必须使用命令python manage.py sqlmigrate {your_app_name;{eg :polls}} {migrations_file_name:{eg:0001_init.py}}

      命令:

      python manage.py sqlmigrate polls 0001
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 2019-09-15
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 2012-09-04
        相关资源
        最近更新 更多