sqlalchemy根据表名动态创建model类
作用如题,直接上代码吧,另外还支持 copy一张表的表结构,新建表并获得model对象 # coding: utf-8
import traceback from sqlalchemy import (BigInteger, Column, DateTime, Integer, MetaData,
String, Table, create_engine, text)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import mapper
from sqlalchemy.schema import CreateTable # 本地数据库
engineLocal = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/lingyun?charset=utf8') Base = declarative_base()
metadata = MetaData() def dictToObj(results, to_class):
"""将字典list或者字典转化为指定类的对象list或指定类的对象
python 支持动态给对象添加属性,所以字典中存在而该类不存在的会直接添加到对应对象
"""
if isinstance(results, list):
objL = []
for result in results:
obj = to_class()
for r in result.keys():
obj.__setattr__(r, result[r])
objL.append(obj)
return objL
else:
try:
obj = to_class()
for r in results.keys():
obj.__setattr__(r, results[r])
return obj
except Exception as e:
print(e)
traceback.print_exc()
return None
# else:
# print("传入对象非字典或者list")
# return None def getModel(name, engine):
"""根据name创建并return一个新的model类
name:数据库表名
engine:create_engine返回的对象,指定要操作的数据库连接,from sqlalchemy import create_engine
"""
Base.metadata.reflect(engine)
table = Base.metadata.tables[name]
t = type(name,(object,),dict())
mapper(t, table)
Base.metadata.clear()
return t def createTableFromTable(name, tableNam, engine):
"""copy一个已有表的结构,并创建新的表
"""
metadata = MetaData(engine)
Base.metadata.reflect(engine)
# 获取原表对象
table = Base.metadata.tables[tableNam]
# 获取原表建表语句
c = str(CreateTable(table))
# 替换表名
c = c.replace("CREATE TABLE " + tableNam, "CREATE TABLE if not exists " + name)
db_conn = engine.connect()
db_conn.execute(c)
db_conn.close()
Base.metadata.clear() def getNewModel(name, tableNam, engine):
"""copy一个表的表结构并创建新的名为name的表并返回model类
name:数据库表名
tableNam:copy的表表名
engine:create_engine返回的对象,指定要操作的数据库连接,from sqlalchemy import create_engine
"""
createTableFromTable(name, tableNam, engine)
return getModel(name, engine)
https://blog.csdn.net/j_object/article/details/80118657
sqlalchemy根据表名动态创建model类的更多相关文章
- silverlight依据json字符串动态创建实体类
1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json); ...
- sqlserver 动态表名 动态字段名 执行 动态sql
动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_execut ...
- 利用MAP动态创建C++类对象
MFC的CRuntimeClass利用链表实现了C++类的动态创建.但是如果项目中对动态创建的要求比较低,我们完全可以利用map实现简单的动态创建. http://blog.csdn.net/yeji ...
- 使用cglib动态创建java类
转至:http://ckwang17.iteye.com/blog/963881 cglib 是一个开源项目! 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Jav ...
- 列出HBASE所有表的相关信息,如表名、创建时间等。
import java.io.IOException; import java.util.Collection; import java.util.Iterator; import org.apach ...
- OC 反射-->动态创建类
系统方法 NSLog(@"%s", __func__); //打印出类的方法名称,如: //打印结果:2018-02-22 10:52:15.394575+0800 DemoRun ...
- PHP+Mysql+easyui点击左侧tree菜单对应表名右侧动态生成datagrid加载表单数据(二)
关于tree菜单生成,参考我的另一篇博文地址tree 菜单 实现功能:点击左侧tree菜单中的table,右侧通过datagrid加载出该表对用的所有数据 难点:获取该表的所有列名,动态生成datag ...
- C#动态创建和动态使用程序集、类、方法、字段等
C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204) (3) 首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动 ...
- 022. ASP.NET为DataSet中数据集添加关系及动态创建主子表和添加主子表关系
protected void Page_Load(object sender, EventArgs e) { string connectionString = "server=.;data ...
随机推荐
- HDU 5536/ 2015长春区域 J.Chip Factory Trie
Chip Factory Problem Description John is a manager of a CPU chip factory, the factory produces lots ...
- luogu2331 [SCOI2005]最大子矩阵
题目大意 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠.1≤n≤100,1≤m≤2,1≤k≤10. 思路 #include < ...
- 【Git学习笔记】用git pull取回远程仓库某个分支的更新,再与本地的指定分支自动merge【转】
本文转载自:http://blog.csdn.net/liuchunming033/article/details/45367629 git pull的作用是,从远程库中获取某个分支的更新,再与本地指 ...
- Gym - 101208J 2013 ACM-ICPC World Finals J.Pollution Solution 圆与多边形面积交
题面 题意:给你一个半圆,和另一个多边形(可凹可凸),求面积交 题解:直接上板子,因为其实这个多边形不会穿过这个半圆,所以他和圆的交也就是和半圆的交 打的时候队友说凹的不行,不是板题,后面想想,圆与多 ...
- 在.xls;*.xlsx类型文件的导入(可以导入多条数据)
2018-11-28 17:36:35 需要jar包:poi-3.8-201203026.jar jsp页面: <LINK href="${basePath}plugins/upl ...
- [转]line-height1.5和line-height:150%的区别
line-height1.5和line-height:150%的区别 一.区别 区别体现在子元素继承时,如下: 父元素设置line-height:1.5会直接继承给子元素,子元素根据自己的font ...
- angularJS之ng-bind与{{}}取值的区别
1:{{ }} 是等页面加载完后,再取值. 2:ng-bind 它是在页面加载的时候,是不会显示{{name}}这种变量出来. 3:ng-bind 可以解决 ng 页面闪烁加载问题. 4:ng-bin ...
- Unity引擎的Player Settings介绍
我用的是unity5.4.3版本的 一.窗口打开: 从菜单栏查看播放器设置,选择 Edit->Project Settings->Player 二.全局设置 第一部分: Company N ...
- 【Oracle】设置快速恢复区及reset快速恢复区
快速恢复区 概念 是一个默认放置所有备份恢复操作有关文件的地方,包括:控制文件在线镜像.在线重做日志.归档日志.外来归档日志.控制文件镜像复制.数据文件镜像复制.RMAN备份片和闪回日志. 如果启用的 ...
- halcon 模板匹配 -- 转化 vector_angle_to_rigid
********************************模板匹配 ********************create_shape_model创建模板,这个函数有许多参数,其中金字塔的级数由N ...