Django 动态建表
# Create your models here.
from django.db import models # name是表名,fields是字段,app_label是你的应用名(如:flow),module是应用下的模型(如:flow.models),options是元类选项
def create_model1(name, fields=None, app_label='', module='', options=None):
class Meta: # 模型类的Meta类
pass if app_label: # 必须在元类中设置app_label,相关属性可参考https://www.cnblogs.com/lcchuguo/p/4754485.html
setattr(Meta, 'app_label', app_label) # 更新元类的选项 if options is not None:
for key, value in options.items():
setattr(Meta, key, value) # 设置模型的属性
attrs = {'__module__': module, 'Meta': Meta} # 添加字段属性
if fields:
attrs.update(fields) # 创建模型类对象
return type(name, (models.Model,), attrs) #用type动态创建类 def install(custom_model):
from django.db import connection
from django.db.backends.base.schema import BaseDatabaseSchemaEditor """
fix:
editor = BaseDatabaseSchemaEditor(connection)
try:
editor.create_model(model=custom_model) # 会抛出个异常,不知为啥,但表会创建
except AttributeError as error:
print(error)
在BaseDatabaseSchemaEditor类中有一个__enter__方法,
需要通过with上下文打开以后deferred_sql变量才会在实例化后赋值给editor
这样就不会有'BaseDatabaseSchemaEditor' object has no attribute 'deferred_sql' """
with BaseDatabaseSchemaEditor(connection) as editor:
editor.create_model(model=custom_model) def CreateNewTab(tabdate):
fields = {
"name": models.CharField(max_length=30),
"job_number": models.IntegerField(unique=True),
"even_shift": models.CharField(max_length=1024),
"administrator_shift": models.CharField(max_length=1024),
"middle_shift": models.CharField(max_length=1024),
"meeting_ops": models.CharField(max_length=1024),
"meeting_ops_manager": models.CharField(max_length=1024),
"checking_station": models.CharField(max_length=1024),
'__str__': lambda self: '%s %s %s %s %s %s %s %s' % (
self.name,
self.job_number,
self.even_shift,
self.administrator_shift,
self.middle_shift,
self.meeting_ops,
self.meeting_ops_manager,
self.checking_station,
), }
options = {'ordering': [
"name",
"job_number",
"even_shift",
"administrator_shift",
"middle_shift",
"meeting_ops",
"meeting_ops_manager",
"checking_station",
], 'verbose_name': 'valued customer', }
custom_model = create_model1(name=tabdate, fields=fields, options=options, app_label='ops_shift_',
module='flow.models')
install(custom_model) # 同步到数据库中
Django 动态建表的更多相关文章
- Oracle 存储过程动态建表
动态sql,顾名思义就是动态执行的sql,也就是说在没执行之前是动态的拼接的. 任务 传入参数:新建的表名hd+当前的年和月,例如hd_201105表结构是:字段1:id ,类型是number,可以自 ...
- Mybatis动态建表
在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysq ...
- MongoDB动态建表方案(官方原生驱动)
MongoDB动态建表方案(官方原生驱动) 需求前提:表名动态,表结构静态,库固定 1.导入相关依赖 <dependency> <groupId>org.mongodb< ...
- django 数据库建表流程,与表结构
目录 配置数据库 创建表结构 多表关连的设置 自创建关联表方法 自建表 和 ManyToManyField 联合使用 配置数据库 在Django项目的settings.py文件中,配置数据库连接信息: ...
- Django ORM --- 建表、查询、删除基础
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...
- django -- ORM建表
前戏 ORM(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ORM的优势: ORM解决的主要问题是对象和关系的映射 ...
- Mysql + Mybatis动态建表
service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.co ...
- 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表
项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...
- MyBatis动态创建表
转载请注明出处:https://www.cnblogs.com/Joanna-Yan/p/9187538.html 项目中业务需求的不同,有时候我们需要动态操作数据表(如:动态建表.操作表字段等).常 ...
随机推荐
- (DP)51NOD 1007正整数分组
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 输入 第1行:一个数N,N为正整数的数量. 第 ...
- js同过url下载文件,调用另存为弹框
实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文 ...
- OGG How to Resync Tables / Schemas on Different SCN s in a Single Replicat
To resync one or more tables/schemas on different SCN's using a single or minimum number of replicat ...
- 492 Construct the Rectangle 构建矩形
详见:https://leetcode.com/problems/construct-the-rectangle/description/ C++: class Solution { public: ...
- Python实现决策树ID3算法
主要思想: 0.训练集格式:特征1,特征2,...特征n,类别 1.采用Python自带的数据结构字典递归的表示数据 2.ID3计算的信息增益是指类别的信息增益,因此每次都是计算类别的熵 3.ID3每 ...
- IO(下)
7. 标准输入.输出流 7.1 标准输入流 源数据源是标准输入设备(键盘.鼠标.触摸屏)等输入设备.在java中用http://System.in 得到一个 InputStream 字节输入流. 需求 ...
- [转]FaceBook ATC 弱网测试工具环境搭建
工具简介 ATC是FaceBook开源的移动网络测试工具Augmented Traffic Control(ATC),能够方便的让我们模拟各种网络环境进行测试. ATC有两个最吸引人的特点: 在手机上 ...
- ios项目中引用其他开源项目
1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Libraries 引入.a文件.Target Depende ...
- 语音行业技术领先者Nuance诚招ASR/NLP研发工程师和软件工程师
Nuance is a leading provider of voice and language solutions for businesses and consumers around the ...
- Devops 技术图谱