sqlalchemy根据表名动态创建model类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/J_Object/article/details/80118657

作用如题,直接上代码吧,另外还支持 copy一张表的表结构,新建表并获得model对象

# coding: utf-8
import tracebackfrom 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 objLelse:try:obj = to_class()for r in results.keys():obj.__setattr__(r, results[r])return objexcept Exception as e:print(e)traceback.print_exc()return None# else:#     print("传入对象非字典或者list")#     return Nonedef 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 tdef 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)

sqlalchemy根据表名动态创建model类相关推荐

  1. python动态创建类_Python中通过参数动态创建扩展类(class)

    class Bar: def super_cool_function(self): print("Cool") 1.利用Python闭包动态扩展类 通过在内部创建并从函数返回它来动 ...

  2. python动态生成数据库表_Python-Flask:动态创建表的示例详解

    今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...

  3. sqlserver 动态表名 动态字段名 执行 动态sql

    动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_execut ...

  4. (设计模式)简单工厂模式之通过配置文件动态创建实现类

    通常我们在使用简单工厂模式的时候会由创建方法create通过传入的参数来判断要实例化哪个对象,就像下面这样: public static class ImageSelectFactory {publi ...

  5. mysql 动态 建表,mysql数据库动态创建表的实例分享

    摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...

  6. JS提交表单页面不跳转、JS下载、动态创建from

    JS下载 function downloadFile(id) {var url = "<%=request.getContextPath()%>/cer/downloadFile ...

  7. mybatis 动态传入表名 注解_Mybatis动态sql的动态表名问题

    update #{tableName} set iobsolete= 1,update_date =#{date} where reg_id in#{id} 一开始这样写的sql,sql语句的表名会有 ...

  8. 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法

    1.type() 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Person的class: class Person(obje ...

  9. flask sqlalchemy 单表查询

    主要内容: 1 sqlalchemy: 一个python的ORM框架 2 使用sqlalchemy 的流程: 创建一个类 创建数据库引擎 将所有的类序列化成数据表 进行增删改查操作 # 1.创建一个 ...

最新文章

  1. boot idea无法识别spring_intellij idea springboot无法读取配置文件的解决方法
  2. @新金融人,点击翻开未来金融新画卷
  3. 鸟哥linux私房菜 之 老段带你学习linux
  4. 2016蓝桥杯省赛---java---B---8(四平方和)
  5. python与sqlite3_sqlite3与python2.5,pysqlite和apsw有什么区别
  6. 一个列表包揽所有你需要的Windows应用
  7. Python使用pandas读取Excel文件多个WorkSheet的数据并绘制柱状图和热力图
  8. syscall 系统调用陷入_系统调用深度剖析(上)
  9. 动态规划之插头DP入门
  10. c语言里,关于宏定义的使用
  11. SQL语句:查询多表更新数据
  12. 完全免费的Windows代码签名证书(大神勿喷)
  13. 批处理遍历当前目录和子目录查找指定后缀名的文件并修改后缀名
  14. Orion Solarwinds监控平台安装教程
  15. 树莓派语音控制开关灯
  16. java jfif_Java文件类型工具类
  17. android开发教程21篇(强烈推荐,几乎每一篇都是精华教程)
  18. 电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)
  19. 使用Hexo搭建个人博客-保姆级教程
  20. 多智能体强化学习:鼓励共享多智能体强化学习中的多样性

热门文章

  1. Linux内核之内核同步(一)——内核同步基础
  2. 如何修改计算机网络时间,在Win7系统中,电脑时间改不了怎么办?
  3. php发布产品隐藏显示,php – 在WooCommerce中隐藏基于产品类型的付款方式
  4. 华为鸿蒙系统智能手机_华为鸿蒙2.0支持设备清单:真正的国产机系统,你的机型支持吗...
  5. 装oracle非常卡吗,win7系统安装完oracle电脑变卡的解决方法
  6. vuecli3 引入全局scss变量_vue-vue-cli3 sass全局变量配置
  7. 给数组倒序_22个超详细的 JS 数组方法
  8. 拦截推送信息_Android10.0公测版H2OS For OnePlus 6T第1版已推送更新
  9. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...
  10. linux 打开telnet登录,linux开启telnet