在夹层中切换数据库后端

Switching database backend in Mezzanine

我正在尝试编写一系列示例的脚本,其中 reader 以增量方式构建 Web 应用程序。第一阶段使用 Mezzanine 的默认配置,使用内置的 SQLlite:

sudo pip install mezzanine
sudo -u mezzanine python manage.py createdb 

初始示例完成后,我想将现有设置切换到 mysql 后端。如果那太复杂,我至少想在新后端重新创建 Mezzanine 附带的内置示例,但 Mezzanine 不允许重新 运行 createdb

CommandError: Database already created, you probably want the migrate command

这看起来应该非常简单,但我似乎无法完全正确(而且仅 migrate 并不能解决问题)。 Google 和官方文档也没有帮助。

我正在采取的步骤:首先,我在 Amazon RDS 上创建一个 MySQL 数据库。然后,我在 myapp/local_settings 中为它设置适当的配置(我确信这些步骤是正确的)。那么:

sudo apt install python-mysqldb
sudo -u mezzanine python /srv/mezzanine/manage.py migrate

然后:

Running migrations:
   No migrations to apply.

我错过了什么?

Mezzanine 项目基于 Python 框架 Django。
除非你遇到夹层特定的问题,否则大多数问题都可以通过弄清楚它是如何用 Django 方式解决的。

Migrations 只是 Django 在 数据库中引用更改和修正 的方式,即模式(因为应用程序和数据库不断发展是变质的)。

为了实际迁移数据,您可以:

  1. 导出当前数据库的内容,eg:

    ./manage.py 转储数据 > db-dump-in-json.json
    ./manage.py --format=xml > db-dump-in-xml.xml

如果数据过多或内存不足,这可能会导致崩溃。那么事情就是使用本机数据库工具来获取 dump.

  1. settings.py 中创建并添加新数据库的设置:

  2. 创建表并在新定义的数据库上设置它们(基于您的模型):

    ./manage.py makemigrations
    ./manage.py迁移

createdb = syncdb(创建)+ migrate(设置)合并

  1. 并在那里重新加载导出的数据:

    ./manage.py loaddata db-dump-in-json.json