上一篇Django 2.1.7 MVT模型示例 - 查詢數據,返回渲染模板數據講述瞭如何使用sqlite3做爲數據庫,執行模型查詢數據,並返回渲染頁面。python
本篇章開始將繼續詳細講述模型這塊的運用。mysql
官方文檔redis
Django在配置鏈接mysql以前,第一個就是須要在mysql中建立好數據庫實例,表的話能夠使用遷移的手段建立。sql
那麼在這裏爲我以前寫的資產管理信息數據庫進行建立。shell
SQL命令以下:數據庫
CREATE DATABASE assetinfo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
複製代碼
建立數據庫實例assetinfo
,而且指定utf8
編碼。django
執行以下:後端
mysql> CREATE DATABASE assetinfo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| assetinfo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
複製代碼
好了,下一步就是在Django項目中配置訪問mysql服務。瀏覽器
在項目的settings.py
進行修改以下:bash
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 修改後端數據庫使用mysql
'NAME': 'assetinfo', # 設置訪問數據庫名稱
'USER': 'root', # 訪問訪問mysql用戶名
'PASSWORD': '*****mysql密碼*****', # 設置訪問密碼
'HOST': 'localhost', # 設置訪問ip地址
'PORT': 3306, # 設置訪問端口號
}
}
複製代碼
能夠看到提示ModuleNotFoundError: No module named 'MySQLdb'
pip3 install pymysql
安裝完畢以後,就導入項目中。
import pymysql
pymysql.install_as_MySQLdb()
複製代碼
導入庫以後,再次運行開發服務,查看是否正常,以下:
根據提示,下一步就是能夠運行遷移數據庫,建立表了。
from django.db import models
class ServerInfo(models.Model):
server_hostname = models.CharField(max_length=20, default=None)
server_intranet_ip = models.CharField(max_length=20, default=None)
server_internet_ip = models.CharField(max_length=20, default=None)
server_shelves_date = models.DateField(auto_now_add=True)
# 中間件類:MiddlewareInfo
# 中間件名稱: name
# 中間件端口號:port
# 中間件所屬服務器:server
class MiddlewareInfo(models.Model):
name = models.CharField(max_length=20)
port = models.IntegerField()
server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None)
複製代碼
這是前面章節建立的服務器信息、中間件信息的數據模型,利用這兩個模型,下一步來執行一下數據遷移,自動在mysql建立數據表。
python3 manage.py makemigrations
python3 manage.py migrate
複製代碼
mysql> use assetinfo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql> show tables;
+----------------------------+
| Tables_in_assetinfo |
+----------------------------+
| assetinfo_middlewareinfo |
| assetinfo_serverinfo |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
12 rows in set (0.00 sec)
mysql> desc assetinfo_serverinfo;
+---------------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| server_hostname | varchar(20) | NO | | NULL | |
| server_intranet_ip | varchar(20) | NO | | NULL | |
| server_internet_ip | varchar(20) | NO | | NULL | |
| server_shelves_date | date | NO | | NULL | |
+---------------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> desc assetinfo_middlewareinfo;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| port | int(11) | NO | | NULL | |
| server_id | int(11) | NO | MUL | NULL | |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql>
複製代碼
能夠看到已經成功建立好數據庫表了。
python3 manage.py shell
# 導入兩個數據庫類
In [1]: from assetinfo.models import ServerInfo,MiddlewareInfo
# 新增一個服務信息類的對象
In [3]: s = ServerInfo()
In [4]: s.server_hostname = "測試服務器"
In [5]: s.server_intranet_ip = "172.16.5.1"
In [6]: s.server_internet_ip = "223.5.5.5"
In [7]: from datetime import date
In [8]: s.server_shelves_date = date(2019,6,10)
In [9]: s.save()
# 新增一個memcached的中間件信息,關聯 服務器 s
In [10]: memcached = MiddlewareInfo()
In [11]: memcached.name = "memcached"
In [12]: memcached.port = "11211"
In [13]: memcached.server = s
In [14]: memcached.save()
# 再新增一個redis的中間件信息,關聯 服務器 s
In [15]: redis = MiddlewareInfo()
In [16]: redis.name = "redis"
In [17]: redis.port = "6379"
In [18]: redis.server = s
In [19]: redis.save()
複製代碼
返回mysql查看數據表,以下:
mysql> select * from assetinfo_serverinfo;
+----+-----------------+--------------------+--------------------+---------------------+
| id | server_hostname | server_intranet_ip | server_internet_ip | server_shelves_date |
+----+-----------------+--------------------+--------------------+---------------------+
| 1 | 測試服務器 | 172.16.5.1 | 223.5.5.5 | 2019-06-10 |
+----+-----------------+--------------------+--------------------+---------------------+
1 row in set (0.00 sec)
mysql>
mysql> select * from assetinfo_middlewareinfo;
+----+-----------+-------+-----------+
| id | name | port | server_id |
+----+-----------+-------+-----------+
| 1 | memcached | 11211 | 1 |
| 2 | redis | 6379 | 1 |
+----+-----------+-------+-----------+
2 rows in set (0.00 sec)
mysql>
複製代碼
好了,到這裏Django訪問交互mysql的功能基本已經初步演示好了。
最後運行查看一下上一篇寫的MVT查詢數據,而後返回到頁面的數據是否正常。
啓動開發服務 python3 manage.py runserver
訪問瀏覽器,以下:
能夠正常查詢出數據,並在頁面渲染。