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

Django 使用连接串配置数据库

Django 配置数据库

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

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 数据库。

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

python manage.py shell

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

from django.db import connection

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

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

输出结果为

(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 的报错。

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

settings.py 中做如下修改。

# 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

from django.db import connection

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

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

输出结果为

(u'information_schema',)
(u'560_amoro',)
(u'accept_5g',)
...

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

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

输出结果为

{'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}}}

相关推荐

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

    2024-07-11 19:42:01       23 阅读
  2. Druid数据库连接配置

    2024-07-11 19:42:01       44 阅读
  3. 数据库连接使用问题 - 1

    2024-07-11 19:42:01       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 19:42:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 19:42:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 19:42:01       57 阅读
  4. Python语言-面向对象

    2024-07-11 19:42:01       68 阅读

热门阅读

  1. Sass 和 SCSS

    2024-07-11 19:42:01       19 阅读
  2. 系统迁移从CentOS7.9到Rocky8.9

    2024-07-11 19:42:01       23 阅读
  3. 深入理解CSS中的块格式化上下文(BFC)

    2024-07-11 19:42:01       21 阅读
  4. EdgeOne安全能力开箱测评挑战赛

    2024-07-11 19:42:01       24 阅读
  5. mysql 8.0.37 客户端在centos7安装顺序

    2024-07-11 19:42:01       22 阅读
  6. 【C++】include头文件中双引号和尖括号的区别

    2024-07-11 19:42:01       17 阅读
  7. 在 MyBatis-Plus 中,字段更新为 null 的方法

    2024-07-11 19:42:01       17 阅读
  8. html基础-持续更新

    2024-07-11 19:42:01       23 阅读