Django 2 1 7 模型 使用mysql數據庫鏈接訪問

上一篇Django 2.1.7 MVT模型示例 - 查詢數據,返回渲染模板數據講述瞭如何使用sqlite3做爲數據庫,執行模型查詢數據,並返回渲染頁面。python

本篇章開始將繼續詳細講述模型這塊的運用。mysql

參考文獻

官方文檔redis

在mysql數據庫建立數據庫實例

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服務。瀏覽器

修改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, # 設置訪問端口號
    }
}
複製代碼

嘗試啓動django的開發服務器,測試是否會報錯

能夠看到提示ModuleNotFoundError: No module named 'MySQLdb'

安裝 pymysql 庫

pip3 install pymysql

安裝完畢以後,就導入項目中。

在assetinfo/init.py文件中加上以下代碼:

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數據庫,查看錶是否建立成功

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

訪問瀏覽器,以下:

能夠正常查詢出數據,並在頁面渲染。

相關文章
相關標籤/搜索