django操作非ORM创建的表

问题: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

猜你喜欢

转载自www.cnblogs.com/hzjdpawn/p/11582226.html
今日推荐