django数据迁移问题集第二版

现在再做一个django项目,测试阶段使用的是sqlite3

(一).sqllite3在pycharm中的查看以及数据编辑

models数据迁移到sqlite3,命令

python manage.py migrate
python manage.py makemigrations
python manage.py migrate

migrate如果提示

  File "D:\mysite\venv\lib\site-packages\django\db\backends\utils.py", line 80, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "D:\gistandard\venv\lib\site-packages\django\db\backends\utils.py", line 65, in execute
    return self.cursor.execute(sql, params)
  File "D:\mysite\venv\lib\site-packages\django\db\utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "D:\mysite\venv\lib\site-packages\django\utils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "D:\mysite\venv\lib\site-packages\django\db\backends\utils.py", line 63, in execute
    return self.cursor.execute(sql)
  File "D:\mysite\venv\lib\site-packages\django\db\backends\sqlite3\base.py", line 326, in execute
    return Database.Cursor.execute(self, query)
django.db.utils.OperationalError: table "*****" already exists

可执行必杀技,

python manage.py migrate appname --fake

(二)如果要想把sqlite3转移至mysql,这里又有许多走过的坑,希望能帮到你

流程:1.在setting里先设置sqlite3的配置,事先把mysql已配置进来注释掉了,将models写好

DATABASES = {

    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    # 'default': {
    #     'ENGINE': 'django.db.backends.mysql',
    #     'NAME': 'demo_db',
    #     'HOST': 'localhost',
    #     'USER': 'root',
    #     'PASSWORD': '123456',
    #     'PORT': '3306'
    # }
}

现在进入重要的一步,导出sqlite3的数据json,看操作

python manage.py dumpdata >sqlite3data.json

意思是将默认的sqlite3数据库的表内容导出至根目录,文件名为sqlite3data.json

接下来,将setting的mysql解除注释,注释掉sqlite3

我们要把sqlite3表映射到mysql里面,事先要在mysql建好库,我这里库名是demo_db,

python manage.py migrate

好了之后去mysql查看下django_content_type和auth_permission是有值的

然后导入刚才的json到mysql库

python manage.py loaddata sqlite3data.json

这个意思是把sqlite3data.json数据导入到mysql数据库,理论上回报错

看错误代码

  File "D:\mysite\venv\lib\site-packages\MySQLdb\cursors.py", line 312, in _query
    db.query(q)
  File "D:\mysite\venv\lib\site-packages\MySQLdb\connections.py", line 224, in query
    _mysql.connection.query(self, query)
django.db.utils.IntegrityError: Problem installing fixture 'D:\mysite\sqlite3data.json': Could not load contenttypes.ContentType(pk=9): (1062, "Duplicate entry 'system-emailsetup' for key 'djang
o_content_type_app_label_model_76bd3d3b_uniq'")

报1062错误的原因是mysql里django_content_type有值,现在进去mysql删除表数据

删除过程中如果报1071,如图

因为有外键关联,解决方法,先解除外键关系,删完再恢复

set foreign_key_checks=0;
truncate table django_content_type;
truncate table auth_permission;
set foreign_key_checks=1;
(venv) D:\mysite>python manage.py loaddata sqlite3data.json
Installed 477 object(s) from 1 fixture(s)

OK,未完待续

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值