Django中因为不同项目操作同一数据库同一应用表出现的迁移问题
2020-03-28 20:04
691 查看
原因:在学习Django过程中,第一阶段创建了第一个项目test1,创建了数据库(bj18)和应用(booktest)
在第二阶段重新创建了第二个项目test2,使用了同样名字的数据库和同样名字的应用
导致在迁移文件时出现了一些情况:
迁移时出错(无错误信息,只是显示):
No migrations to apply,是因为数据库中django_migrations有记录了
如:两天前的上一个项目我创建了一个app叫booktest的0001_initial文件,
今天的新项目我又想迁移同样的app(booktest)同样的0001_initial,而且还是同样的数据库(bj18)
然而django判断已经有了这个记录,所以跳过生成数据库的过程,所以才会导致No migrations to apply
解决办法:删除django_migrations中对应的记录即可(千万不要错删其他条,不然可能造成不可逆操作,一堆报错)今天因为没有搞懂,误把django_migrations这个表删除了,结果一发不可收拾,一堆报错,导致要全部清空虚拟环境数据库(即bj18这个数据库)中的所有表才能重新生成,但是以前的app数据库里面的数据要一一备份,重新导入,搞得很麻烦,但也顺便学习了数据库的备份方式。
迁移时报错,说BookInfo already exits ,那是因为以前的项目已经创建了这个数据库,只需在迁移文件0001_initial.py中删除对应的
migrations.CreateModel(BookInfo),再直接执行migrate即可。执行完后,它还会提示你说你的0001_initial.py中没有bookinfo,heroinfo等数据表,问你要不要删除(yes/no)
这是因为这些表是我以前的项目中创建在这个数据库中的,这里我选择不想删除,选择保留,所以填no
下面是备份数据库的一些过程:
本次备份数据库的方法是使用into outfile 和 load data infile导入导出备份数据
初次导出时遇到错误:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement.
原因:mysql默认规定数据库导入导出有目录限制,只能从规定目录中导入导出
查看官方文档,
secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
执行:
show variables like '%secure%';
得到:
说明我们只能导出到/var/lib/mysql-files/这个目录下面
顺带一提,据说我们安装完mysql后会自动生成一个
my.ini文件,secure_file_priv可以在这里面配置
里面规定了MySQL 的所有默认配置,如端口号、默认字符集、默认存储引擎等等。
而该文件位于数据库的存储地方,且为隐藏文件
这里又引申出了如何查找mysql数据库所有文件的存储位置
执行:
show global variables like "%datadir%";
结果:
进入该目录,发现权限不够,输入su回车,输入密码,进入成功
执行ls -a,结果并未找到类似文件,目前原因不明
因此目前无法自定义secure_file_priv,只能老老实实导出到/var/lib/mysql-files/这里面去
导出(备份,这里是一个表导出到一个文件里,对必要备份的表一一导出(本次我需要备份数据的表只要三个)):
select * from booktest where status!=0 and name!='' into outfile '/var/lib/mysql-files/booktest' fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
其中第二行省略也能导出成功,注意导出后文件里面数据存储方式的区别
导入到数据库的新表中(原表已删除,新表是通过迁移文件生成的,表结构完全一样,无数据):
load data infile '/var/lib/mysql-files/booktest' into table mytable_bak fields terminated by '|' enclosed by '"' lines terminated by '\r\n' ;
完成
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Django初级手册1-项目和应用的创建与简单的数据库操作
- 解决大量TCPIP连接后出现“因为系统缺乏足够缓冲区空间或者因为队列已满无法执行套接字上操作”的问题
- 应用数据库操作报错问题排查
- No migrations to apply.(django不能创建数据库中的表的问题) Django 1.10.1下操作成功的案例
- 转帖:django下操作数据库的字符问题
- 老平台迁移过程中出现的MSSQL数据库接连问题
- 队列的基本操作应用---舞伴问题(数据结构实验项目三)
- Windows下写的JavaWeb项目部署到Linux服务器出现的数据库连接池问题,求解
- Hibernate配置和操作不同数据库的问题
- 关于vb项目在不同操作系统(中英文windows)中打开时出现组件无法加载的问题
- django操作数据库问题总结
- Django运行访问项目出现的问题:DisallowedHost at / Invalid HTTP_HOST header
- django项目数据库迁移过程记录及注意事项
- ssm+dubb+zookeeper:使用ssm+dubb搭建分布式项目时出现的问题(从数据库中读取到的数据显示到浏览器中出现500)
- EntityFramework Core迁移时出现数据库已存在对象问题解决方案
- MS Access 数据库操作使用OledbParameter出现的怪异问题
- web 项目从数据库读取数据时出现乱码的问题的解决
- sql2008出现问题“因为无法为数据库 'MRsys' 中的对象 'dbo.T_USER_1311_DATA' 分配空间, 'PRIMARY' 文件组已满。请删除不需要的文件..."问题,解决了
- 转-数据库应用基础系列-第2章 并发操作的一致性问题 (2)
- DJANGO不同应用之间的用户迁移