我们已对 Django1.6 app完成了数据库从mysql到PostgreSQL的迁移,如果你的环境很干净,这个过程就会很简单,只要允许syncdb 或者 migrate创建表,truncating表中的数据,然后运行dumpdata 和loaddatamanagement命令就完成了。
第一步,在你的PostgreSQL数据库中创建一个空的实例:
CREATE DATABASE dbname OWNER rolename;
第二步,在你的Django中给创建的数据库加上配置
在setting.py 中,我们这样配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dbname', 'USER': 'dbuser', 'PASSWORD': 'dbpass', 'HOST': 'mysql.example.com', 'PORT': '', }, 'postgresql': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dbname', 'USER': 'dbuser', 'PASSWORD': 'dbpass', 'HOST': 'postgresql.example.com', 'PORT': '', } }
这样我们就指定了以后名称操作的是哪个数据库。
第三步,在PostgreSQL实例中创建表
python manage.py syncdb --migrate --no-initial-data --database=postgresql
在PostgreSQL中运行syncdb 和 migrations,这个过程并没有初始数据。
第四步,truncate新创建的表
尽管我们在先前的步骤中指定了 –no-initial-data ,为了防止在迁移过程中用户的自定义数据在未知情况下加入了表中,我们最好还是truncate一下新建的表,我们可以生成一个SQL脚本,运行:
python manage.py sqlflush --database=postgresql第五步,从mysql中备份数据到JSON 文件中
Django 有一个dumpdata命令,用它可以生成一个数据库无关的备份,默认格式是JSON。
python manage.py dumpdata --all --natural --indent=4 > dbname.json
这里的 -all 参数是为了确保你在导出数据的过程中有可能有你自己的过滤和修改数据的需求,-natural 参数告诉Django使用natural keys(如果可用的话) –indent 参数是为了使输出更加可读。
你也许想只导出特定的apps里的数据,或者只导出一个celery logs ,这样的话,你就可以使用 –exclude参数,例如:
python manage.py dumpdata --all --natural --exclude=djcelery --exclude=search.SearchLog --indent=4 > dbname.json
第六步,加载JSON数据到PostgreSQL数据库中
python manage.py loaddata dbname.json --database=postgresql
基本上迁移的过程就结束了,现在你只要修改一下你的数据库配置,然后是PostgerSQL成为默认的数据库。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dbname', 'USER': 'dbuser', 'PASSWORD': 'dbpass', 'HOST': 'postgresql.example.com', 'PORT': '', } }
在我们的情况下,我们的数据库不是很干净,我们的数据库是给一个PHP的遗留代码创建的,我们现在还在一步步摆脱它,我们有一些Django之外的数据库,并且都在被程序使用,为了把这些迁移到PostgreSQL中,我使用了这个工具,过程还是简单一些。
注意事项
Django 信号
你可能想禁止这些,当一个数据库记录创建的时候,你的程序可能就会发送给你的用过邮件,为了不打扰它们,在加载数据的时候,你需要保证它们被禁止了,Here's one way to handle this 这里我们使用了检测器保证信号不会别触发。
约束(像非空,unique 和外键)
我们的数据库迁移过程碰到了很多这种问题,比如一个外键约束,但是其他的一个表不存在了,有一下空置的记录,但是模型定义中不允许,比如复制的过程中存在unique约束,这些都需要手动干预,我必须使用SQL语句清除掉这些,Dumpdata 和loaddata 将会检测到这些,所以你的数据库必须是一个干净的一致的状态。
主键的硬编码
这很痛苦,因为在我们的测试 suite中,到处都是主键的硬编码,所以很多测试到失败了,因为使用PostgreSQL 处理的序列的方法和mysql不太一样,我必须手动修改700多个测试用例,大都是很简单的修改但是很消耗时间。
原生SQL语句
幸运的是,我们只有一处使用了原生sql语句,有些mysql中的函数在PostgreSQL中不适用,我们只用修改为在PostgreSQl中相同功能的函数就可以了。
大小写敏感
字符串比较在PostgreSQL中是大小写敏感的,但是在Mysql中不是,我在迁移非Django数据表过程中也遇到了一些问题,索引创建的时候,命令需要id,但是字段的名字是Id(字母I),我只要重命名为id就可以了。
本文向大家介绍Linux下将数据库从MySQL迁移到MariaDB的基础操作教程,包括了Linux下将数据库从MySQL迁移到MariaDB的基础操作教程的使用技巧和注意事项,需要的朋友参考一下 自从2012年来,维基百科已经开始从MySQL迁移到MariaDB的过程,是维基媒体数据库架构变革的一个重大里程碑,将英文和德文版的维基百科数据库Wikidata移植到了MariaDB 5.5版本上。 在
问题内容: 我有一个现有的PHP / MySQL应用程序,我正尝试将其迁移到AngularJS / Firebase,以作为学习这些较新技术的一种方式。 该应用程序在MySQL中具有自己的表架构。一个这样的表如下所示: 我的问题是:如何将这个表结构及其中的数据从MySQL迁移到Firebase? 我尝试通过查询将数据导出到JSON字符串中,例如: 这给出了有效的JSON字符串,例如: 我将其保存在
本文向大家介绍Django 将更改应用到数据库(迁移),包括了Django 将更改应用到数据库(迁移)的使用技巧和注意事项,需要的朋友参考一下 示例 创建新模型或修改现有模型后,您将需要为更改生成迁移,然后将迁移应用于指定的数据库。这可以通过使用Django的内置迁移系统来完成。manage.py在项目根目录中使用实用程序: 上面的命令将在migrations应用程序的子目录下创建必需的迁移脚本。
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 3年前关闭。 我已经将数据库从postgresql更改为mysql,但是我不知道如何将数据从一个转移到另一个。 有谁知道任何命令可以将数据库从postgresql复制/迁移到mysql? 问题答案: 几年 前面 对这个问题,并用 pg2mysql 编辑20
我已经学习了Djangogirs教程,该教程通常要求您在<code>pythonanywherepostgresql</code>并且在控制台中运行<code>migrate</code>命令时,我得到了以下错误: 这到底是什么意思? 使用 谢啦 好吧,在读了一些之后,这是我的问题。 我在本地运行了后gresql。然后,我将 wbapp 部署到了蟒蛇的任何地方。在那里,我试图通过运行迁移来创建数据
我正在尝试将SQL Server2008数据库迁移到MySQL。MySQL数据库位于digital Ocean的vps上。在迁移过程中,源选择是成功的,而目标选择是失败的。对于目标选择,我使用的连接方法是标准的TCP/IP over SSH。单击Test connection会出现错误:“不支持连接方法。此版本的MySQL workbench migration Wizard不支持SSH上的MyS
move key db-index 返回1成功。0 如果key不存在,或者已经在指定数据库中