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

网友投稿 276 2022-11-16

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

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

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

参考文献

​​官方文档​​

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

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

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

SQL命令如下:

CREATE DATABASE assetinfo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

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

执行如下:

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​​进行修改如下:

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 pymysqlpymysql.install_as_MySQLdb()

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

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

查看已有的数据模型类

from django.db import modelsclass 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# 中间件所属服务器:serverclass 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 makemigrationspython3 manage.py migrate

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

mysql> use assetinfo;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> 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 dateIn [8]: s.server_shelves_date = date(2019,6,10)In [9]: s.save()# 新增一个memcached的中间件信息,关联 服务器 sIn [10]: memcached = MiddlewareInfo()In [11]: memcached.name = "memcached"In [12]: memcached.port = "11211"In [13]: memcached.server = sIn [14]: memcached.save()# 再新增一个redis的中间件信息,关联 服务器 sIn [15]: redis = MiddlewareInfo()In [16]: redis.name = "redis"In [17]: redis.port = "6379"In [18]: redis.server = sIn [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​​

访问浏览器,如下:

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java中使用Files.readLines()处理文本中行数据方式
下一篇:CSS 浮动布局,解决清除浮动的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~