现在再做一个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,未完待续