Django 动态建表

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Random_lee

# -*- coding: utf-8 -*-
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)

def install(custom_model):
	from django.db import connection
	from django.db.backends.base.schema import BaseDatabaseSchemaEditor
	editor = BaseDatabaseSchemaEditor(connection)
	try:
		editor.create_model(model=custom_model)  # 会抛出个异常,不知为啥,但表会创建
	except AttributeError as aerror:
		print(aerror)

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)  # 同步到数据库中

  

原文地址:https://www.cnblogs.com/randomlee/p/10737181.html

时间: 2024-10-25 23:07:40

Django 动态建表的相关文章

动态建表的学习总结

在没有学习js之前,当遇到需要建表时,往往都是比较麻烦的,而且不容易根据新的需求来更改.自从学了js之后,再也不用担心这个问题辣.使用js动态建表,在一个页面中出现多个表格时,还可以通过其函数多次调用来快速实现,简直不要太愉快~ 献上代码,有不足的地方还请指正. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Tit

Mybatis动态建表

在网上查了很多,都说Mybatis不支持动态建表,心凉了一节.还好找到这么一篇,找到了希望:http://www.zzzyk.com/show/ec5660d9cf1071b3.htm 经过在mysql环境下验证,确实可用,不知道其他数据库是否支持,如下: Mapper.xml <update id="createNewTable"> create table `${realTableName}`( `id` int(11) NOT NULL AUTO_INCREMENT,

Spring JdbcTemplate框架(2)——动态建表

本篇博客使用Spring JdbcTemplate实现动态建表.前面介绍了,它封装了数据库的基本操作,让我们使用起来更加灵活,下面来实战. 1.准备工作 引入jar包 2.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi

反射动态建表

SQLiteHelper定义一个接口SQLiteDataTable,里边重写onCreate和onUpgrade方法.在SQLiteDaoBase基类去实现这个SQLiteDataTable接口方法. 然后UserDao继承了SQLiteDaoBase这个基类,实现抽象类里的oncreate和onUpgrade两个方法,在oncreate方法里创建user表,写sql语句. 在SQLiteHelper里的onCreate方法里通过反射获得任意一个实现了SQLiteDataTable接口的实例,再

如何在数据库动态建表

动态建表首先需要了解Statement类 Statement 对象用 Connection 的方法createStatement 创建,例如 //创建连接对象Connection connection = DBUtil.getConnection();//创建Statement对象Statement statement=connection.createStatement(); 创建完之后通过执行以sql语句为参数的Statement的方法,来执行sql语句完成对数据库的操作. Statemen

技术文档---反射动态建表

1.SQLiteDataTable是SQLiteHelper定义的一个接口,它包括onCreate和onUpgrade两个方法 2.SQLiteDaoBase实现了SQLiteDataTable接口,是个抽象类,所有的dao类都继承它 3.因为UserDao继承了SQLiteDaoBase,所以实现了oncreate和onUpgrade两个方法,建user表的句子都在oncreate方法里 4.所以在SQLiteHelper里的onCreate方法里可通过反射获得任意一个实现了SQLiteDat

jdbc mysql动态建表

通过检查来决定是否建表 如果表尚未被建立,就执行ptmt语句更新,在数据库中创建这个表, 如果这个表已经存在,就不执行建表操作了: package SQLCon; import java.sql.*; public class CreateTables { public static boolean HaveTable(String TableName) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.

Mysql + Mybatis动态建表

service层业务 package com.zx.common.service.impl; import com.zx.common.entity.SysUser; import com.zx.common.mapper.SysUserMapper; import com.zx.common.service.SysUserService; import com.zx.common.util.DateUtil; import org.springframework.beans.factory.a

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

项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后生成相应的表. 须要动态配置的部分实例: 上图仅仅是一小部分,一个一个组合起来大概有三百多.每一项相应一个实体,显然不好,就算是依照规律归归类还是有不少.于是就想到了在执行期来确定这些东西.開始有尝试过动态编译生成实体类,后来发如今数据存取上都存在问题,由于是后来生成的,所以仅仅能用反射来获取.这样