前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >12. Django 2.1.7 模型 - 使用mysql数据库连接访问

12. Django 2.1.7 模型 - 使用mysql数据库连接访问

作者头像
Devops海洋的渔夫
发布2022-01-17 10:02:22
1.2K0
发布2022-01-17 10:02:22
举报
文章被收录于专栏:Devops专栏Devops专栏

上一篇Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据讲述了如何使用sqlite3作为数据库,执行模型查询数据,并返回渲染页面。

本篇章开始将继续详细讲述模型这块的运用。

参考文献

官方文档

在mysql数据库创建数据库实例

Django在配置连接mysql之前,第一个就是需要在mysql中创建好数据库实例,表的话可以使用迁移的手段创建。

那么在这里为我之前写的资产管理信息数据库进行创建。

SQL命令如下:

代码语言:javascript
复制
CREATE DATABASE assetinfo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

创建数据库实例assetinfo,并且指定utf8编码。

执行如下:

代码语言:javascript
复制
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进行修改如下:

代码语言:javascript
复制

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文件中加上如下代码:

代码语言:javascript
复制
import pymysql
pymysql.install_as_MySQLdb()

导入库之后,再次运行开发服务,查看是否正常,如下:

根据提示,下一步就是可以运行迁移数据库,创建表了。

查看已有的数据模型类

代码语言:javascript
复制
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创建数据表。

执行数据迁移

代码语言:javascript
复制
python3 manage.py makemigrations
python3 manage.py migrate

返回mysql数据库,查看表是否创建成功

代码语言:javascript
复制
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

代码语言:javascript
复制
# 导入两个数据库类
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查看数据表,如下:

代码语言:javascript
复制
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

访问浏览器,如下:

可以正常查询出数据,并在页面渲染。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
  • 在mysql数据库创建数据库实例
  • 修改Django项目中连接的后端数据库为mysql
  • 尝试启动django的开发服务器,测试是否会报错
  • 安装 pymysql 库
    • 在assetinfo/init.py文件中加上如下代码:
    • 查看已有的数据模型类
    • 执行数据迁移
    • 返回mysql数据库,查看表是否创建成功
    • 执行插入数据
    • 查看上一篇定义的视图
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档