gpt4 book ai didi

python - 为什么Python迁移重命名表?

转载 作者:太空宇宙 更新时间:2023-11-03 14:58:13 26 4
gpt4 key购买 nike

我刚刚接触 python django...我正在创建一些这样的模型:

class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField("DatePublished")

class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE )
choise_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)

class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField("DatePublished")

class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE )
choise_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)

并在 pycharm 终端中运行这两个命令:

python manage.py makemigrations polls
python manage.py sqlmigrate polls 0001

然后我看到了一些像这样的输出:`BEGIN;

--
-- Create model Choice
--
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choise_text" varchar(200) NOT NULL, "votes" integer N
OT NULL);
--
-- Create model Question
--
CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" da
tetime NOT NULL);
--
-- Add field question to choice
--
ALTER TABLE "polls_choice" RENAME TO "polls_choice__old";
CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choise_text" varchar(200) NOT NULL, "votes" integer N
OT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id"));
INSERT INTO "polls_choice" ("choise_text", "id", "question_id", "votes") SELECT "choise_text", "id", NULL, "votes" FROM "polls_choic
e__old";
DROP TABLE "polls_choice__old";
CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
COMMIT;

`

就像您看到的那样,它将名为 polls_choice 的表重命名为 polls_choice_old!但为什么?这意味着数据库中可能存在同名的表!好的,但是为什么 Django 重命名它呢?有人能告诉我,这个逻辑的原因是什么吗?

最佳答案

sqlite 中的 ALTER TABLE 命令受到限制 ( more details here )。 Django 通过重命名表、创建新表、复制数据,最后删除旧表来解决这个问题。

关于python - 为什么Python迁移重命名表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350649/

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