问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?
工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢?
下面介绍一种完美解决方案:
现有一张表,表名为tencent_depth,表结构如下:
mysql> desc tencent_depth; +------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | Positionname | varchar(100) | NO | | NULL | | | Workingplace | char(20) | YES | | NULL | | | Positioncategory | char(20) | YES | | NULL | | | Peoplenumber | char(10) | YES | | NULL | | | Operatingduty | text | YES | | NULL | | | Jobrequirements | text | YES | | NULL | | +------------------+--------------+------+-----+---------+----------------+ 8 rows in set (0.00 sec)
表里面有很多数据,用scrapy爬取的腾讯招聘信息,一共3827条记录
怎么通过django的ORM操作(增删改查),让数据可视化?(这里只写models.py相关配置)
方案如下:
修改models.py文件
class tencent_depth(models.Model): id = models.AutoField(primary_key=True) Positionname = models.CharField(max_length=100) Workingplace = models.CharField(max_length=20) Positioncategory = models.CharField(max_length=20) Peoplenumber = models.CharField(max_length=10) Operatingduty = models.TextField(max_length=1000) Jobrequirements = models.TextField(max_length=1000) class Meta: # 必须要写这个类 db_table = 'tencent_depth' # 指定表名
删除migrations目录下生成的文件,然后执行这个命令就行
python manage.py makemigrations
查询成功
添加一个字段,插入一条记录,并获取值显示出来(主要看看增删改查有问题没)
修改models.py文件
from django.db import models class tencent_depth(models.Model): id = models.AutoField(primary_key=True) Positionname = models.CharField(max_length=100) Workingplace = models.CharField(max_length=20) Positioncategory = models.CharField(max_length=20) Peoplenumber = models.CharField(max_length=10) Operatingduty = models.TextField(max_length=1000) Jobrequirements = models.TextField(max_length=1000) # 添加一个时间字段 create_time = models.DateTimeField(null=True) class Meta: db_table = 'tencent_depth'
修改view.py视图函数
from django.shortcuts import render,HttpResponse,redirect # Create your views here. from app import models import datetime def index(request): data = datetime.datetime.now() data = data.strftime("%Y-%m-%d %H:%I:%S") # 获取本地格式化时间 # 添加一条测试记录 ret = models.tencent_depth.objects.create(Positionname='本地测试(运维开发)', Workingplace='本地测试(上海)', Positioncategory='本地测试(技术)', Peoplenumber='本地测试(1人)', Operatingduty='本地测试(无)', Jobrequirements='本地测试(无)', create_time=data, ) return render(request, 'index.html', {'ret': ret})
修改templates里面的index.html
{% extends 'base.html' %} {% block content %} <div class="jumbotron"> <p>{{ ret.Positionname }}</p> <p>{{ ret.Workingplace }}</p> <p>{{ ret.Positioncategory }}</p> <p>{{ ret.Operatingduty }}</p> <p>{{ ret.Jobrequirements }}</p> <p>{{ ret.create_time}}</p> # 这里传过来的时间已经是格式化时间,所以不需要用date过滤器了 <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p> </div> {% endblock %} {{% block title %} <title>Index</title> {% endblock %}}
然后执行
python manage.py makemigrations
python manager.py migrate