开发有时需要动态创建表,创建完成后需要动态选择model对应的表,该需求如何实现

1、model层   TestBlock为了动态创建表、getBlockModel为了动态选择表

from django.db import models

# Create your models here.
class TestBlock(models.Model):
BLOCK_ID = models.CharField(max_length=40,primary_key=True, verbose_name='对象ID')
BLOCK_NAME = models.CharField(max_length=200, verbose_name='姓名')
class Meta:
db_table = 'TEST_BLOCK_T' def getBlockModel(table_name):
class MyCLass(models.Model):
BLOCK_ID = models.CharField(max_length=40, primary_key=True, verbose_name='对象ID')
BLOCK_NAME = models.CharField(max_length=200, verbose_name='姓名')
class Meta:
db_table = table_name
return MyCLass

2、url

from django.urls import path

from . import views

urlpatterns = [
path('autoCreate', views.createTest),
path('autoSelect', views.selectTest),
]

3、view层createTest方法  重点的地方 注意红色地方,注释掉可以动态创建表,但是如果不注释掉,动态变更实体对应的数据表在使用它,就会报错

ERROR:django.db.utils.OperationalError: (1054, "Unknown column 'TEST_BLOCK_T_1.BLOCK_ID' in 'where clause'")

分别注释 #-------------1-begin-------------------------- 和 # -------------2-begin--------------------------之间的代码,执行代码动态创建两个表并把数据插入进去。

from django.shortcuts import render

# Create your views here.
from .models import *
from django.http import HttpResponse
from django.db import connection from django.db.backends.base.schema import BaseDatabaseSchemaEditor def createTest(request):
#-------------1-begin--------------------------
TestBlock._meta.db_table = 'TEST_BLOCK_T_' + '1'
# #创建分表
cursor = connection.cursor()
editor = BaseDatabaseSchemaEditor(connection)
with BaseDatabaseSchemaEditor(connection) as editor:
editor.create_model(model=TestBlock)
# testBlock = TestBlock()
# testBlock.BLOCK_ID = '1'
# testBlock.BLOCK_NAME = 'oracle'
# testBlock.save()
# -------------1-end-------------------------- # -------------2-begin--------------------------
TestBlock._meta.db_table = 'TEST_BLOCK_T_' + '2'
# #创建分表
cursor = connection.cursor()
editor = BaseDatabaseSchemaEditor(connection)
with BaseDatabaseSchemaEditor(connection) as editor:
editor.create_model(model=TestBlock) # testBlock1 = TestBlock()
# testBlock1.BLOCK_ID = '2'
# testBlock1.BLOCK_NAME = 'mysql'
# testBlock1.save()
# -------------2-end--------------------------
return HttpResponse("yc is a good man")

4、view层selectTest方法  动态选择实体对应的表

def selectTest(request):
TestBlock = getBlockModel('TEST_BLOCK_T_' + '1')
testBlocks = TestBlock.objects.all()
for testBlock in testBlocks:
print('1---testBlock.BLOCK_ID:'+testBlock.BLOCK_ID)
print('1---testBlock.BLOCK_NAME:'+testBlock.BLOCK_NAME) TestBlock = getBlockModel('TEST_BLOCK_T_' + '2')
testBlocks = TestBlock.objects.all()
for testBlock in testBlocks:
print('2---testBlock.BLOCK_ID:'+testBlock.BLOCK_ID)
print('2---testBlock.BLOCK_NAME:'+testBlock.BLOCK_NAME)
return HttpResponse("yc is a good man")

数据结果:

1---testBlock.BLOCK_ID:1
1---testBlock.BLOCK_NAME:oracle
2---testBlock.BLOCK_ID:2
2---testBlock.BLOCK_NAME:mysql

结论是 TestBlock._meta.db_table = 'TEST_BLOCK_T_' + '1'可以动态创建表,而动态选择表只能用TestBlock = getBlockModel('TEST_BLOCK_T_' + '1') 这样的方式。

django动态创建表和动态选择实体的更多相关文章

  1. YII2框架动态创建表模型

    YII2框架动态创建表模型 在YII2中,每个表对应一个model类 在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表: 如果要在程序里 ...

  2. python在sqlite动态创建表源码

    代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...

  3. MyBatis动态创建表

    转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...

  4. OrmLite动态创建表,一个实体类创建多张表的的偏招

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...

  5. Spring Boot:实现MyBatis动态创建表

    综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...

  6. 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...

  7. SQL Server 动态创建表结构

    需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...

  8. C# 动态创建类,动态创建表,支持多库的数据库维护方案

    1.创建表 SqlSugar支持了3种模式的建表,非常的灵活,可以MYSQL MSSQL ORACLE等用同一语法创建数据库,不需要考虑数据库的兼容性 中间标准: string  大文本 5.1.3. ...

  9. JS动态创建表单post提交

    <script> //@创建表单方法 function post(URL, PARAMS) { var temp = document.createElement("form&q ...

  10. java 动态创建数据库和动态连接数据库

    项目中有一个需求要动态创建数据库并且要动态连接数据库,本来以为还很难实现呢,在网上找了好久,都不是很理想,最后看到有人说创建数据库时,先连接到任意一个数据库,获得连接后用createStatement ...

随机推荐

  1. 如何搭建园区3d可视化大屏

    搭建园区3D可视化大屏需要考虑多个方面,包括硬件设备.数据源获取.软件工具和可视化设计. 以下是一个详细的步骤指南,帮助您了解如何搭建园区3D可视化大屏. 1. 硬件设备选择: - 显示屏幕:选择适合 ...

  2. 企业数据分析免费试用的BI工具,有什么推荐?

    当涉及到企业数据分析的免费试用BI工具时,有几个受欢迎且功能强大的选项可供选择.以下是对每个工具的详细介绍,帮助您了解其特点和优势. Datainside BI(https://datainside. ...

  3. SpringBoot设置日志级别

    输出到控制台 logging: # 日志记录到文件中 file: # 指定文件名 name: server.log logback: rollingpolicy: # 指定文件大小 max-file- ...

  4. MES系统怎么实现车间管理中的生产计划和排产计划

    生产计划和排产计划都是制造企业中非常重要的概念,它们的目的是为了确保企业能够按时交付高质量的产品,同时还要保持生产效率和成本效益. 一.生产计划 生产计划是指制造企业为了满足客户需求而制定的计划,它包 ...

  5. PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台

    个人用户管理是业务系统中非常基础且重要的一个公共服务系统,我们写的绝大多数应用都和个人用户或会员有关,用户(会员)数据安全无小事,必须有一个完备的用户管理平台系统. 因为不同公司的主业务不同,个人用户 ...

  6. JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date

    一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...

  7. flutter BLoC框架

    BLoC(Business Logic Component)是一种在Flutter中用于管理状态和处理业务逻辑的设计模式和架构模式. BLoC 的核心思想是将应用程序的状态.业务逻辑和UI分离开来,以 ...

  8. java中根据公网IP获取地址

    package com.dashan.utils.iputils; import com.fasterxml.jackson.databind.ObjectMapper; import okhttp3 ...

  9. maven系列:依赖管理和依赖范围

    目录 一.依赖管理 使用坐标导入jar包 使用坐标导入 jar 包 – 快捷方式 使用坐标导入 jar 包 – 自动导入 二.依赖范围 三.可选依赖 四.排除依赖 一.依赖管理 使用坐标导入jar包 ...

  10. 基于k6和python进行自动化性能测试

    摘要:在性能测试中,达到相应的性能指标对于一个软件来说十分重要,在本文中,将介绍一种现代化性能测试工具k6. 本文分享自华为云社区<基于k6和python进行自动化性能测试>,作者: 风做 ...