【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}}}
相关推荐
闪电麦坤9510 分钟前
思路解析:第一性原理解 SQL
服务器·数据库·sql
珹洺38 分钟前
数据库系统概论(八)SQL单表查询语言超详细讲解(附带例题表格对比带你一步步掌握)
数据库·sql
斌果^O^1 小时前
mysql常用方法
数据库·mysql
全职计算机毕业设计1 小时前
SpringBoot Vue MySQL酒店民宿预订系统源码(支付宝沙箱支付)+代码讲解视频
vue.js·spring boot·mysql
man20171 小时前
基于ssm+mysql的高校设备管理系统(含LW+PPT+源码+系统演示视频+安装说明)
数据库·mysql·ssm
不辉放弃2 小时前
java连数据库
java·mysql
GzlAndy2 小时前
MySQL全局优化
数据库·mysql
m0_741574752 小时前
mysql主从同步
数据库·mysql
小白教程3 小时前
MySQL数据库的安全性防护
数据库·mysql
Lion Long3 小时前
CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜
数据库·redis·mysql·缓存·腾讯云·codebuddy首席试玩官·codebuddy