Tips:一些记录,一些笔记

2024/08/23
FRIDAY
Courtesy is the inseparable companion of virtue.
礼貌和美貌是分不开的伴侣。

01
Django默认的后端数据库
在Django中,如果你不做配置的修改,那么你默认的后端DB是SQLite:

# Database# https://docs.djangoproject.com/en/5.0/ref/settings/#databasesDATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3","NAME": BASE_DIR "db.sqlite3",}}
它通常被存放在Django项目的根目录中,如下所示:

02
SQLite全库导出
不考虑 Django,从数据库的角度来说,对SQLite做全库导出的方法如下所示:
(base) adamhuan@Leviathan djangoProject__data_search % pwd/Users/adamhuan/adamhuan_code_base/data-life-management/djangoProject__data_search(base) adamhuan@Leviathan djangoProject__data_search %(base) adamhuan@Leviathan djangoProject__data_search % ls -ltrtotal 512-rwxr-xr-x 1 adamhuan staff 696 8 7 11:38 manage.pydrwxr-xr-x 2 adamhuan staff 64 8 7 11:38 templatesdrwxr-xr-x 5 adamhuan staff 160 8 8 11:30 utils-rw-r--r--@ 1 adamhuan staff 156 8 15 09:36 requirements.txtdrwxr-xr-x 13 adamhuan staff 416 8 15 13:14 craftdrwxr-xr-x 8 adamhuan staff 256 8 19 19:25 djangoProject__data_searchdrwxr-xr-x 12 adamhuan staff 384 8 19 19:41 sectiondrwxr-xr-x 12 adamhuan staff 384 8 19 19:49 product-rw-r--r-- 1 adamhuan staff 172032 8 20 08:54 db.sqlite3-rw-r--r--@ 1 adamhuan staff 53262 8 21 16:39 sqlite_data_20240821.json(base) adamhuan@Leviathan djangoProject__data_search %(base) adamhuan@Leviathan djangoProject__data_search % sqlite3SQLite version 3.41.2 2023-03-22 11:56:21Enter ".help" for usage hints.Connected to a transient in-memory database.Use ".open FILENAME" to reopen on a persistent database.sqlite> .open db.sqlite3sqlite> .output sqlite_data_20240821.sqlsqlite> .dumpsqlite>sqlite> .exit(base) adamhuan@Leviathan djangoProject__data_search %(base) adamhuan@Leviathan djangoProject__data_search % ls -ltrtotal 592-rwxr-xr-x 1 adamhuan staff 696 8 7 11:38 manage.pydrwxr-xr-x 2 adamhuan staff 64 8 7 11:38 templatesdrwxr-xr-x 5 adamhuan staff 160 8 8 11:30 utils-rw-r--r--@ 1 adamhuan staff 156 8 15 09:36 requirements.txtdrwxr-xr-x 13 adamhuan staff 416 8 15 13:14 craftdrwxr-xr-x 8 adamhuan staff 256 8 19 19:25 djangoProject__data_searchdrwxr-xr-x 12 adamhuan staff 384 8 19 19:41 sectiondrwxr-xr-x 12 adamhuan staff 384 8 19 19:49 product-rw-r--r-- 1 adamhuan staff 172032 8 20 08:54 db.sqlite3-rw-r--r--@ 1 adamhuan staff 53262 8 21 16:39 sqlite_data_20240821.json-rw-r--r-- 1 adamhuan staff 38087 8 21 16:45 sqlite_data_20240821.sql(base) adamhuan@Leviathan djangoProject__data_search %(base) adamhuan@Leviathan djangoProject__data_search % head -n 5 sqlite_data_20240821.sqlPRAGMA foreign_keys=OFF;BEGIN TRANSACTION;CREATE TABLE IF NOT EXISTS "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL);INSERT INTO django_migrations VALUES(1,'contenttypes','0001_initial','2024-08-07 03:44:20.030093');INSERT INTO django_migrations VALUES(2,'auth','0001_initial','2024-08-07 03:44:20.035320');(base) adamhuan@Leviathan djangoProject__data_search %
可以看到,已经将SQLite全库导出为SQL文件了。
03
Django迁移SQLite数据
在Django中,要迁移SQLite的数据需要这么做。
首先,将Django的SQLite的数据导出:
python manage.py dumpdata > data.json
这样,就将SQLite的数据导出为文件「data.json」,并存放在Django项目的根目录。
然后,修改Django的数据库配置为MySQL,或者任何你期望的DB;修改配置文件「settings.py」中的「DATABASES」的配置部分。
创建表结构:
python manage.py makemigrationspython manage.py migrate
在正式加载前,要确保MySQL的表中是空的:
# 进入MySQLuse '你选定的数据库库名'delete from auth_permission;delete from django_content_type;
在前面建表之后,上面两个表中是有数据的;
需要先将其中数据删除,否则在下一步加载数据的过程中,会报错,提示「重复导入数据」
最后,执行Django的数据加载:
python manage.py loaddata data.json
如果依旧还有报错,大部分的可能都是因为字符集导致的错误;
因此,需要将导出的数据文件「data.json」的编码转换为「UTF-8」,然后,再执行数据加载,就应该没有报错了。
END
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。
文章转载自Nephilim,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




