django把SQLite数据库的数据导入到MySQL数据库中

一、把SQLite数据库中的数据导入到MySQL数据库中

django有内置的db.sqlite3数据库;但是有些时候我们需要切换到mysql数据库

切换mysql数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   # mysql 驱动
        'NAME': 'mysite_db',		# 数据库名
        'USER': 'tengxt',			# 用户名
        'PASSWORD': 'tengxt123456',	# 密码
        'HOST': 'localhost',		# 访问的地址(localhost|127.0.0.1|'') 都代表本机
        'PORT': '3306',				# 端口号 mysql默认端口是3306
    }
}
迁移数据

因为很多时候,最初使用的是SQLite数据库,但后面想把SQLite数据库中的数据迁移到mysql数据库。可以使用Django导入导出数据的命令完成迁移

导出SQLite数据库

确保db.sqlite3数据库在项目总存在;数据源是SQLite。执行以下命令

(mysite_env) D:\PyCharm_WorkSpace\mysite_env\mysite>python manage.py dumpdata > data.json
导入Mysql数据库

确保项目中data.json存在;把数据源切换成Mysql。执行命令

(mysite_env) D:\PyCharm_WorkSpace\mysite_env\mysite>python manage.py loaddata data.json
 # 导入成功   
Installed 336 object(s) from 1 fixture(s)

如果导入时报 **1062. “Duplicate entry ‘xxxx’ for key ‘xxx_uniq’;**这是因为数据有重复的。

解决方案: 根据提示找到相应的数据表把重复的数据删掉,然后重新执行导入命令就行。

mysql时区设置

Django官网msyql时区配置

Time zone definitions¶
# 把 mysql_tzinfo_to_sql时区表加载到MySQL数据库中
If you plan on using Django's timezone support, use mysql_tzinfo_to_sql to load time zone tables into the MySQL database. This needs to be done just once for your MySQL server, not per database.

下载mysql_tzinfo_to_sql时区表的地址:https://dev.mysql.com/downloads/timezones.html;

下载对应着自己MySQL数据库版本的时区表就行;下载完成后

timezone_posix.sql文件添加到MySQL中

# 在mysql_tzinfo_to_sql文件夹下执行以下命令
D:\studying\python\timezone_2018g_posix_sql>mysql -u root -p mysql < timezone_posix.sql
Enter password: ******

D:\studying\python\timezone_2018g_posix_sql>

如果出现mysql不是内部命令的提示,这是因为没把mysql配置添加到环境变量。

配置完成后执行以上命令等待导入

二、django设置缓存数据库

在settings.py文件中添加缓存(cache)配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

创建缓存表

python manage.py createcachetable

实现基于数据库的缓存

from django.core.cache import cache
# 获取七天热门博客的缓存数据
	hot_blogs_for_seven_days = cache.get('hot_blogs_for_seven_days')
	if hot_blogs_for_seven_days is None:
		hot_blogs_for_seven_days = get_seven_days_hot_blogs()
		cache.set('hot_blogs_for_seven_days', hot_blogs_for_seven_days, 3600)
		print('hot_blogs_for_seven_days---> calc')
	else:
		print('hot_blogs_for_seven_days---> use cache')

我的博客地址:django把SQLite数据库的数据导入到MySQL数据库中

你可能感兴趣的:(Django,SQLite,MySQL,数据迁移)