django动态创建表和动态选择实体
开发有时需要动态创建表,创建完成后需要动态选择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动态创建表和动态选择实体的更多相关文章
- YII2框架动态创建表模型
YII2框架动态创建表模型 在YII2中,每个表对应一个model类 在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表: 如果要在程序里 ...
- python在sqlite动态创建表源码
代码之余,将开发过程中经常用的代码片段备份一下,如下的代码是关于python在sqlite动态创建表的代码,应该能对各位有所用. import sqlite3 as db conn = db.conn ...
- MyBatis动态创建表
转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...
- OrmLite动态创建表,一个实体类创建多张表的的偏招
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/LonelyRoamer/article/details/26299355 在做一个Android的项 ...
- Spring Boot:实现MyBatis动态创建表
综合概述 在有些应用场景中,我们会有需要动态创建和操作表的需求.比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等.这个时候就需要我们动态的生成和操作数据库表了. ...
- 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表
项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...
- SQL Server 动态创建表结构
需求是,在word里面设计好表结构(主要在word中看起来一目了然,方便维护),然后复制sql 里面,希望动态创建出来 存储表结构的表 CREATE TABLE [dbo].[Sys_CreateTa ...
- C# 动态创建类,动态创建表,支持多库的数据库维护方案
1.创建表 SqlSugar支持了3种模式的建表,非常的灵活,可以MYSQL MSSQL ORACLE等用同一语法创建数据库,不需要考虑数据库的兼容性 中间标准: string 大文本 5.1.3. ...
- JS动态创建表单post提交
<script> //@创建表单方法 function post(URL, PARAMS) { var temp = document.createElement("form&q ...
- java 动态创建数据库和动态连接数据库
项目中有一个需求要动态创建数据库并且要动态连接数据库,本来以为还很难实现呢,在网上找了好久,都不是很理想,最后看到有人说创建数据库时,先连接到任意一个数据库,获得连接后用createStatement ...
随机推荐
- win32 API 文件夹操作函数整理
常用操作文件目录的函数 1. CreateDirectory 创建文件夹 原型: BOOL CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIB ...
- 关于win11系统修改用户名导致登录进入不了系统的坑
背景:公司的新电脑,win11系统,开机进入需要注册用户名和密码,在取用户名的时候,手快没注意取了一个中文名,结果这给我后面的工作带来了一个坑,我在用mysqlworkbench进行数据备份,需要对数 ...
- unsafe类和varhandle类讲解
Java的Unsafe类是一个非常特殊的类,它提供了一组原始.底层的操作,可以跳过Java的限制,直接操作内存和对象.这些操作可能会破坏Java的安全机制,所以Unsafe类被标记为不安全的. Uns ...
- MyBatisPlus简介
MyBatisPlus特性 国内的一个网站 网站地址简介 | MyBatis-Plus (baomidou.com)
- C++ Qt开发:StandardItemModel数据模型组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Standar ...
- Python——第二章:元组
元组 tuple 使用小括号组成 特点: 元组是不可变的,固定了某些数据. t = ("张无忌", "赵敏", "呵呵哒") print(t ...
- PyTorch项目源码学习(2)——Tensor代码结构初步学习
PyTorch版本:1.10.0 Tensor Tensor是Pytorch项目较为重要的一部分,其中的主要功能如存储,运算由C++和CUDA实现,本文主要从前端开始探索学习Tensor的代码结构. ...
- SHA加密解密
一.概述 SHA(Secure Hash Algorithm,安全哈希算法)是一类广泛应用于加密领域的算法,主要用于数据完整性校验和加密认证.SHA算法首次出现在1993年,由美国国家安全局(NSA) ...
- LeetCode 图篇
743. 网络延迟时间 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源节点,v 是目标节点 ...
- C++篇:第九章_字符串_知识点大全
C++篇为本人学C++时所做笔记(特别是疑难杂点),全是硬货,虽然看着枯燥但会让你收益颇丰,可用作学习C++的一大利器 九.字符串 可以用[ ]进行下标访问 使用string类需将头文件包含在程序中, ...