把Django字典格式的数据库配置转成tortoise-orm的URL格式
Django版的数据库配置如下:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": "test_1",
"USER": "root",
"PASSWORD": "123456",
"HOST": "localhost",
"PORT": "3306",
}
}
参考tortoise-orm的文档转换后如下:
mysql://root:123456@localhost:3306/test_1
注:如果密码里含有特殊字符,需要使用标准库urllib.parse.quote_plus进行转义
也可以使用tortoise-database-url进行自动转换,用法如下:
1. 安装
pip install tortoise-database-url
2. 在命令行中使用
python -c "
import database_url
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_1',
'USER': 'root',
'PASSWORD': '123456@2024',
'HOST': 'localhost',
'PORT': '3306',
}
}
print(database_url.from_django_item(DATABASES['default']))
"
# mysql://root:123456%402024@localhost:3306/test_1
3. 代码中使用
import os
import database_url # pip install tortoise-database-url
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test_1',
'USER': os.getenv('DB_USER', 'root'),
'PASSWORD': os.getenv('DB_PASS', '123456'),
'HOST': os.getenv('DB_HOST', 'localhost'),
'PORT': os.getenv('DB_PORT', '3306'),
}
}
DB_URL = database_url.from_django_item(DATABASES['default'])
TORTOISE_ORM = {
'connections': {'default': DB_URL},
'apps': {
'models': {
'models': ['app.models', 'aerich.models'],
'default_connection': 'default',
},
},
}
更多用例见:https://github.com/waketzheng/database-url/blob/main/tests/test_main.py