【Django】Django 使用连接串配置数据库

Django 使用连接串配置数据库

Django 配置数据库

修改 settings.pyDATABASES,这里以 mysql 数据库为例。

python 复制代码
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'your_database_name',
        'USER': 'your_database_user',
        'PASSWORD': 'your_database_password',
        'HOST': 'your_database_host',
        'PORT': 'your_database_port',
    }
}

配置完成后,依次执行如下语句,将数据库迁移至配置的 mysql 数据库。

shell 复制代码
python manage.py makemigrations
python manage.py migrate

Django Shell

Django shell 是一个交互式的 Python 解释器,能够应用 Django 项目的模型以及环境变量。

更多信息可以查询 Django 官方文档:https://docs.djangoproject.com/en/5.0/ref/django-admin/#shell。

通过如下命令即可进入 Django Shell

shell 复制代码
python manage.py shell

执行如下语句,即可使用配置的 Mysql 信息,执行相应的 SQL 语句。

python 复制代码
from django.db import connection

# 使用游标执行 SQL 查询
with connection.cursor() as cursor:
    cursor.execute("show tables")
    rows = cursor.fetchall()

# 打印结果
for row in rows:
    print(row)

输出结果为

shell 复制代码
(u'auth_group',)
(u'auth_group_permissions',)
(u'auth_permission',)
...

Django 使用连接串配置数据库

Django 配置数据库为连接串,需要使用第三方库 dj_database_url,第三方库的文档地址:https://github.com/jazzband/dj-database-url

配置 Mysql 的连接串格式为:

Engine Django Backend URL
MySQL django.db.backends.mysql mysql://USER:PASSWORD@HOST:PORT/NAME

实际使用如下,这里的密码需要使用 urllib 库转化为 URL 编码,否则当密码中含有特殊字符 # 时会出现 ValueError 的报错。

shell 复制代码
# 实际的密码是:$#@!
ValueError: invalid literal for int() with base 10: '"euansu12356$'

settings.py 中做如下修改。

python 复制代码
# mysql://USER:PASSWORD@HOST:PORT/NAME
import dj_database_url
import urllib.parse

password = "password"
encoded_password = urllib.parse.quote_plus(password)

DATABASES = {
    'default': dj_database_url.parse(
        f'mysql://username:{encoded_password}@127.0.0.1:3306/database'
    )
}

再次使用 django 提供的 connection 工具,能够正常连接 Mysql 数据库并正常执行 SQL

python 复制代码
from django.db import connection

# 使用游标执行 SQL 查询
with connection.cursor() as cursor:
    cursor.execute("show databases")
    rows = cursor.fetchall()

# 打印结果
for row in rows:
    print(row)

输出结果为

shell 复制代码
(u'information_schema',)
(u'560_amoro',)
(u'accept_5g',)
...

这里打印一下配置的数据库所有连接参数。

python 复制代码
# 配置的连接串为  `f'mysql://username:{encoded_password}@127.0.0.1:3306/database?ssl=Flase'`
from django.conf import settings
databases = settings.DATABASES
print(databases)

输出结果为

shell 复制代码
{'default': {'ENGINE': 'django.db.backends.mysql', 'ATOMIC_REQUESTS': False, 'CONN_MAX_AGE': 0, 'HOST': '127.0.0.1', 'USER': 'username', 'PASSWORD': 'password', 'OPTIONS': {'ssl': 'Flase'}, 'AUTOCOMMIT': True, 'NAME': 'database', 'TIME_ZONE': None, 'PORT': 3306, 'TEST': {'COLLATION': None, 'CHARSET': None, 'NAME': None, 'MIRROR': None}}}
相关推荐
oradh38 分钟前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改
YOU OU1 小时前
Redis哨兵 & 集群
数据库·redis·sentinel
小罗水1 小时前
第8章 文档解析与文本切片
数据库·spring·spring cloud·微服务
瞬间&永恒~1 小时前
【MySQL】 主从复制多拓扑搭建实验
运维·数据库·mysql·云原生
han_hanker2 小时前
sql语法 DECODE, CASE ... WHEN
数据库·sql·oracle
井川廊咏2 小时前
vi 删除指定范围的行,不用再反复按 dd
数据库·mysql
小码农 - 初3 小时前
MySQL前言
mysql
z落落3 小时前
StudentInfo表 分页、增删改 存储过程+C# WinForm 存储过程实现分页和增删改查
数据库·sql·mysql
影寂ldy3 小时前
WinForm 数据库【新增+编辑】完整功能(参数化查询+配置文件+防报错全套)
数据库
数据库小学妹3 小时前
MySQL联合索引失效怎么解决?从key_len逆向分析
数据库·mysql·性能优化·索引失效·联合索引·最左前缀·keylen