iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >django操作非ORM创建的表
  • 648
分享到

django操作非ORM创建的表

操作djangoORM 2023-01-30 22:01:59 648人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

django--ORM连接已存在的表问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢?下面介绍一种完美解决方案

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条记录

blob.png


关于scrapy爬虫是怎么爬取数据的,这里先不介绍,以后会写相关的文档,


现有一张3827条数据的表,怎么通过django的ORM操作(增删改查),让数据可视化?(这里只写models.py相关配置)


第一次尝试:

根据tencent_depth的表结构,使用ORM连接的时候需要根据tencent_depth的表写表结构,需要一一对应

修改models.py文件:

class tencent_depth(models.Model):
    id = models.AutoField(primary_key=True)              # 设置id为主键,自增
    Positionname = models.CharField(max_length=80)       # 设置Positionname为char类型,指定长度为80
    Workingplace = models.CharField(max_length=20)       # 设置Workingplace为char类型,指定长度为20
    Positioncategory = models.CharField(max_length=20)   # 设置Positioncategory为char类型,指定长度为20
    Peoplenumber = models.CharField(max_length=10)       # 设置Peoplenumber为char类型,指定长度为10
    Operatingduty = models.TextField(max_length=1000)    # 设置Operatingduty为text类型,指定长度为1000
    Jobrequirements = models.TextField(max_length=1000)  # 设置Jobrequirements为text类型,指定长度为1000


先执行

python manage.py makemigrations

执行makemigrations 建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件


再执行

python manager.py migrate

将该改动作用到数据库文件


访问页面:  (报错)

blob.png


会报错找不到app_tencent_depth这个表,而我的表名为tencent_depth

django的ORM连接表的时候,会自动在前面加上应用名(app_),就是创建应用时起的名字



第二次尝试:

既然它说找不到app_tencent_depth这个表,那就直接把tencent_depth这个表的名字改为app_tencent_depth

mysql里面执行:

mysql> use scrapyDB;
Database changed
mysql> alter table tencent_depth rename app_tencent_depth;
Query OK, 0 rows affected (0.01 sec)


修改models.py文件

class tencent_depth(models.Model):
    id = models.AutoField(primary_key=True)              # 设置id为主键,自增
    Positionname = models.CharField(max_length=80)       # 设置Positionname为char类型,指定长度为80
    Workingplace = models.CharField(max_length=20)       # 设置Workingplace为char类型,指定长度为20
    Positioncategory = models.CharField(max_length=20)   # 设置Positioncategory为char类型,指定长度为20
    Peoplenumber = models.CharField(max_length=10)       # 设置Peoplenumber为char类型,指定长度为10
    Operatingduty = models.TextField(max_length=1000)    # 设置Operatingduty为text类型,指定长度为1000
    Jobrequirements = models.TextField(max_length=1000)  # 设置Jobrequirements为text类型,指定长度为1000


删除migrations目录下生成的文件


然后执行

python manage.py makemigrations

python manager.py migrate


再次访问页面,可以获取数据了, 别急没完, 下面还有终极解决方案

blob.png


虽然可以用django的ORM连接表了,但是却改了表名  (线上环境中,表和表之间肯定有很多关联的), 不能这么做



完美解决方案:

既然不能改tencent_depth表的名字,那么让DjangoORM连接表的时候,指定表名不就行了吗

这里先把之前改掉的表名,改回来先

mysql> use scrapyDB;
Database changed
mysql> alter table app_tencent_depth rename tencent_depth;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------------------+
| Tables_in_scrapyDB         |
+----------------------------+
| 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             |
| tencent_depth              |
| tencent_recruit            |
+----------------------------+
12 rows in set (0.00 sec)

这里表名已经改回来了 里面有个表为 tencent_depth


修改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 


访问页面:

blob.png

查询成功


添加一个字段,插入一条记录,并获取值显示出来(主要看看增删改查有问题没)

修改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


访问页面:

blob.png


添加字段,添加记录,获取数据都没有问题,完美解决django的ORM操作已存在表的问题


--结束END--

本文标题: django操作非ORM创建的表

本文链接: https://www.lsjlt.com/news/179150.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • django操作非ORM创建的表
    django--ORM连接已存在的表问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢下面介绍一种完美解决方案:...
    99+
    2023-01-30
    操作 django ORM
  • django--ORM的单表操作
    Django--ORM单表操作创建一个新的django项目项目目录结构:Django连接数据库配置重点:第一步:修改settings.py文件DATABASES = {     &...
    99+
    2023-01-30
    操作 django ORM
  • Python Django ORM连表正反操作技巧
    一、A表男生,B表女生,C表关系 1通过A表查与某个男生有关系的所有女生 思想1:在A表中确认男生后,通过反查到C表,获取相关内容(QuerySet),然后再跨到B表获取所有女生信...
    99+
    2024-04-02
  • Django ORM (一) 创建数据库
    创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上创建数据库结构 from dja...
    99+
    2023-01-31
    数据库 Django ORM
  • 如何理解Django ORM操作
    这篇文章主要讲解了“如何理解Django ORM操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Django ORM操作”吧!查询聚合操作聚合操作...
    99+
    2024-04-02
  • 怎么理解Django ORM操作
    本篇内容主要讲解“怎么理解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Django ORM操作”吧!表结构设计还是从实际角度出...
    99+
    2024-04-02
  • 如何了解Django ORM操作
    本篇内容主要讲解“如何了解Django ORM操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何了解Django ORM操作”吧!查询操作对象.外键字段比如,我们拿到了一个书的信息,我们可以...
    99+
    2023-06-15
  • Django模型层实现多表关系创建和多表操作
    目录前言创建表关系多表数据操作 - 增删改一对多&一对一关系 - 增删改增加数据删除数据修改数据多对多关系 - 增删改增加多对多关系 - add()删除多对多关系 - rem...
    99+
    2024-04-02
  • navicat创建表的操作步骤
    这篇文章将为大家详细讲解有关navicat创建表的操作步骤,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先创建一个数据库,命名为userdemo。在新建的数据库上创建一...
    99+
    2024-04-02
  • Pycharm开发Django项目创建ORM模型的问题
    随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长。会出现很多相近的...
    99+
    2024-04-02
  • Django模型层如何实现多表关系创建和多表操作
    本篇内容介绍了“Django模型层如何实现多表关系创建和多表操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录前言创建表关系多表数据操作...
    99+
    2023-06-20
  • 操作MySQL实现简单的创建库和创建表
      目录              操作数据库                    创建数据库                    查看数据库                    选择数据库                  ...
    99+
    2023-09-09
    mysql
  • 三、1:orm的增删改字段、创建表
    1 orm介绍 1 tools--->Run manage.py Task   python3 manage.py makemigrations 只需要敲命令:makemigrations(记录数据库的修改记录) python3 ma...
    99+
    2023-01-31
    字段 orm
  • Django ORM 事务和查询优化的操作方法
    目录一、事务操作二、 ORM 惰性查询三、only与defer四、select_related与prefetch_related一、事务操作 模块 from django....
    99+
    2024-04-02
  • django使用models创建表
    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在sett...
    99+
    2024-04-02
  • Python Django ORM 深潜:掌控数据库操作的艺术
    Django 对象关系映射器 (ORM) 是一个强大且灵活的工具,它允许 Django 开发人员以面向对象的方式与数据库交互。通过使用 ORM,开发人员可以将数据库表映射到 Python 类,并通过这些类来访问和操作数据库中的数据。 Dj...
    99+
    2024-04-02
  • MySQL创建表操作命令分享
    目录一、表命令1.查看所有表2.创建表3.创建一个用户表二、MySQL支持的常用数据类型1.数字型2.字符串3.日期三、MySQL支持的常用约束四、存储引擎五、表命令(crud)1....
    99+
    2024-04-02
  • MySQL创建数据库和创建数据表的操作过程
    目录mysql 创建数据库和创建数据表一、数据库操作语言二、创建数据库1. 连接 MySQL2. 查看当前的数据库3. 创建数据库4. 创建数据库时设置字符编码5. 查看和显示数据库的编码方式6. 使用 alter da...
    99+
    2024-04-02
  • 链表的创建与基本操作(Python版)
    #/usr/bin/python #-*- coding: utf-8 -*- #Function: simulate the link-list in python #__author__: Tresser # class ...
    99+
    2023-01-31
    链表 操作 Python
  • python数据类型-列表创建和操作
    列表创建和操作a)  创建列表b)  基本操作c)  遍历与其说  列表  它是一个数据类型,用起来 更像一个灵活多变的数据存储方案 创建列表创建列表例子player = 'mao 80 50'   mao = '100 60 0'   z...
    99+
    2023-01-31
    数据类型 操作 列表
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作