Django
使用連接串配置數據庫
Django
配置數據庫
修改 settings.py
中 DATABASES
,這里以 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.parsepassword = "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}}}