【问题标题】:After south migration failed on sqlite, I switched to MYSQL在sqlite上南迁移失败后,我切换到MYSQL
【发布时间】:2014-10-26 04:25:57
【问题描述】:

所以我是 Django 的新手,我在 model.py 中添加了一个字段,这在 Django 中产生了问题。

我了解到我需要一个迁移工具,并使用了南。原来南方有sqlite的问题。所以我为 MYSQL 配置了 Django 设置。我可以将数据添加到数据库(MYSQL)

我删除了 db.sqlite3 文件,但它在 syncdb 之后又回来了。

当我运行 syncdb 时,它会说:

Syncing...
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

Synced:
 > django.contrib.admin
 > django.contrib.auth
 > django.contrib.contenttypes
 > django.contrib.sessions
 > django.contrib.messages
 > django.contrib.staticfiles
 > south

Not synced (use migrations):
- accounts
(use ./manage.py migrate to migrate these)

所以我的问题是: 1. 改用MYSQL并没有像我希望的那样消除南方失败的中间迁移。为了解决这个问题,我现在有什么选择

  1. 我什至必须做任何事情,还是我可以继续开发我的应用程序,或者这个中期迁移需要解决吗?我问是因为新的 MYSQL DB 似乎有我添加的新字段,这就是我想首先迁移的原因。所以你可以看到我的困惑......我的迁移失败了,但是现在使用 MYSQL,这些字段很好,但 Django 仍然认为我在迁移中。为什么会这样?有什么建议?

谢谢

【问题讨论】:

  • 当我运行 syncdb -all 时,会从“未同步”中删除帐户并添加到“已同步”中。但是,如果我运行 syncdb 帐户再次报告为“未同步”。仅供参考,我不知道这意味着什么,仍然需要这方面的建议。 Django 新手。
  • 你的 django 版本是什么?
  • 感谢@Liarez,但我已经离开了 Django,因为它超出了我的需要。超过 6 个月没有使用过。我的应用程序非常小。还是谢谢。

标签: django database-migration django-south


【解决方案1】:

我与 Databases & Migrations & South 打过很多很多(很多)次...我希望这些信息可以帮助您解决问题并节省您几个小时的辛勤工作

迁移帐户应用

  • 我有一个问题,accounts 是您的应用程序的名称吗?还是外部应用?

accounts 应用似乎是由 South 管理的,也就是说它不会与命令 python manage.py syncdb 同步,您需要自己迁移它:

# This command generates the migrations file
python manage.py shchemamigration accounts --initial
# This command use the migrations file and apply the changes to the DB
python manage.py migrate accounts


# --initial is used only in the INITIAL migration
# If you modify the models on the accounts app and want to migrate again
# You will need to
python manage.py shchemamigration accounts --auto
python manage.py migrate accounts

密切关注您的迁移

如果您按照标准结构检查文件夹migrations,则它是yourapp/yourapp/migrations

  • 如果您删除您的数据库,请记住删除您的迁移文件,最好重新开始,除非您需要保存数据库更改
  • 确保您的数据库和迁移是同步的,如果它们是同步的,那么对数据库添加一些更改会很容易

  • 有时,虽然您使用南,但当您使用python manage.py syncdb 您的应用同步,我会解释哪个问题可能来自这里:

    1. 您的应用模型是使用命令python manage.py syncdb 在数据库中创建的
    2. 在 1. 之后,您执行 python manage.py schemamigration --initial,它将创建初始迁移
    3. 现在,如果您尝试执行python manage.py migrate yourapp 它将失败,因为表已经创建,所以您需要伪造初始迁移: p>

      python manage.py migrate yourapp --fake
      

      从这里你可以毫无问题地使用南

如何“重启”数据库

此过程将清空数据库并删除所有迁移,请注意是否有要保存的数据

有时您会弄乱迁移,根据问题,删除数据库并重新开始迁移可能会更快:

python manage.py dbshell

# Next 3 lines inside the MySQL console
>> drop database yourappdatabase
>> create database yourappdatabase
>> quit

# Delete all the migrations within the migrations folder
rm yourapp/yourapp/migrations/00*

python manage.py syncdb
python manage.py schemamigration yourapp --initial
python manage.py migrate yourapp

如何保存数据库中的信息

有时当您启动一个新应用时,您会多次删除/创建数据库,为了避免在模型上一次又一次地输入数据,从某些模型创建迁移可能很有用:

python manage.py dumpdata yourapp.ModelName > file.json

要重新加载此数据,您只需:

python manage.py loaddata file.json

【讨论】:

    猜你喜欢
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2020-10-12
    • 2017-05-26
    • 2017-01-14
    • 2011-11-05
    • 2020-04-09
    相关资源
    最近更新 更多