sqlalchemy根据数据库结构生成映射的实体
# !/usr/bin/python
# -*- coding: UTF-8 -*- from sqlalchemy import *
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import Session
from sqlalchemy.ext.declarative import declarative_base # 创建对象的基类:
Base = declarative_base() class PTable(Base): __tablename__ = 'tables' table_catalog = Column(String(512)) #
table_schema = Column(String(64)) #
table_name = Column(String(64), primary_key=True)
table_type = Column(String(64)) #
engine = Column(String(64)) #
version = Column(BigInteger) #
row_format = Column(String(10)) #
table_rows = Column(BigInteger) #
avg_row_length = Column(BigInteger) #
data_length = Column(BigInteger) #
max_data_length = Column(BigInteger) #
index_length = Column(BigInteger) #
data_free = Column(BigInteger) #
auto_increment = Column(BigInteger) #
create_time = Column(Date) #
update_time = Column(Date) #
check_time = Column(Date) #
table_collation = Column(String(32)) #
checksum = Column(BigInteger) #
create_options = Column(String(2048)) #
table_comment = Column(String(2048)) # class PColumn(Base): __tablename__ = 'columns' table_schema = Column(String(255))
table_name = Column(String(255))
column_name = Column(String(255), primary_key=True)
data_type = Column(String(255))
character_maximum_length = Column(String(255)) #字符类型时,字段长度
column_key = Column(String(255)) #PRI为主键,UNI为unique,MUL是什么意思?
column_comment = Column(String(255)) #字段说明
extra = Column(String(255)) #'auto_increment' dic = {}
dic["tinyint"] = "Boolean"
dic["smallint"] = "SmallInteger"
dic["mediumint"] = "Integer"
dic["int"] = "Integer"
dic["integer"] = "Integer"
dic["bigint"] = "BigInteger"
dic["float"] = "Float"
dic["double"] = "Numeric"
dic["decimal"] = "Numeric"
dic["date"] = "Date"
dic["time"] = "Time"
dic["year"] = "Integer"
dic["datetime"] = "Date"
dic["timestamp"] = "Date"
dic["char"] = "String"
dic["varchar"] = "String"
dic["tinyblob"] = "String"
dic["tinytext"] = "String"
dic["blob"] = "String"
dic["text"] = "String"
dic["mediumblob"] = "LargeBinary"
dic["mediumtext"] = "String"
dic["longblob"] = "LargeBinary"
dic["longtext"] = "String" session = None; def open(host,port,db,user,pwd) :
url = 'mysql+mysqlconnector://%s:%s@%s:%d/%s' % (user,pwd,host,port,db)
engine = create_engine(url)
DbSession = sessionmaker(bind=engine)
session = DbSession() return session def close() :
session.close() def generate_db(db_name) :
tq = session.query(PTable)
ts = tq.filter(PTable.table_schema==db_name).all() for t in ts:
generate_table(t.table_name,t.table_comment) def generate_table(table_name,memoto) : print ""
print "#%s" % memoto
print "class %s(Base) : " % table_name
print ""
print " __tablename__ = '%s'" % table_name
print "" cq = session.query(PColumn)
cs = cq.filter(PColumn.table_name== table_name ).all() for c in cs:
item = generate_column(c)
print item def generate_column(c) :
item = " " + c.column_name.lower()+" = Column("+dic[c.data_type]
if c.character_maximum_length != None :
item = item + "(%d)" % c.character_maximum_length
if c.column_key == "PRI":
item = item + ",primary_key=True" item = item + ")"
item = item.ljust(60) if c.column_comment != None :
item = item +"# "+c.column_comment
return item session = open("127.0.0.1",3306,"information_schema","root","xxx")
generate_db("netsharp")
close()
生成的结果如下
#
class sys_job(Base) : __tablename__ = 'sys_job' group_name = Column(String(50)) #
cron = Column(String(50)) #
cron_description = Column(String(500)) #
description = Column(String(500)) #
java_type = Column(String(500)) #
par = Column(String(200)) #
status = Column(Integer) #
resource_node_id = Column(Integer) #
code = Column(String(50)) #
name = Column(String(200)) #
memoto = Column(String(1000)) #
id = Column(Integer,primary_key=True) #
creator_id = Column(Integer) #
creator = Column(String(50)) #
create_time = Column(Date) #
updator_id = Column(Integer) #
updator = Column(String(50)) #
update_time = Column(Date) #
ts = Column(Date) #
job_group = Column(String(50)) #
cron_expression = Column(String(50)) # #
class sys_job_log(Base) : __tablename__ = 'sys_job_log' group_name = Column(String(50)) #
java_type = Column(String(500)) #
operation = Column(String(50)) #
timed = Column(BigInteger) #
code = Column(String(50)) #
name = Column(String(200)) #
memoto = Column(String(1000)) #
id = Column(Integer,primary_key=True) #
creator_id = Column(Integer) #
creator = Column(String(50)) #
create_time = Column(Date) #
updator_id = Column(Integer) #
updator = Column(String(50)) #
update_time = Column(Date) #
ts = Column(Date) #
job_group = Column(String(50)) #
operation_date = Column(Date) #
sqlalchemy根据数据库结构生成映射的实体的更多相关文章
- SqlServer数据库表生成C# Model实体类SQL语句——补充
在sql语句最前边加上 use[数据库名] 原链接:https://www.cnblogs.com/jhli/p/11552105.html --[SQL骚操作]SqlServer数据库表生成C ...
- PowerDesigner反向工程,根据Oracle数据库结构生成ER图(2014-3-25记)
01.添加数据服务端 02. PowerDesigner 1. 新建PDM:选择菜单File->New Model,[Model type]选择Physical Data Model,[DBMS ...
- 根据数据库结构生成RzCheckTree
现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加 ...
- 【SQL骚操作】SqlServer数据库表生成C# Model实体类SQL语句
已知现有表T1 想快速获取cs类结构 /// <summary> /// T1 /// </summary> public class T1 { /// <summary ...
- 根据数据库结构生成TreeView
procedure TUIOperate.FillTree(treeview: TTreeView); var findq: TADOQuery; node: TTreeNode; //这个方法是根据 ...
- 【转发】SqlServer数据库表生成C# Model实体类SQL语句
已知现有表T1 通过运行下面的sql即可,先配置表名. declare @TableName sysname = 'T1' declare @Result varchar(max) = ' /// & ...
- delphi 根据数据库结构生成TreeView
procedure TUIOperate.FillTree(treeview: TTreeView); var findq: TADOQuery; node: TTreeNode; / ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- 一行code实现ADO.NET查询结果映射至实体对象。
AutoMapper是一个.NET的对象映射工具. 主要用途 领域对象与DTO之间的转换.数据库查询结果映射至实体对象. 这次我们说说 数据库查询结果映射至实体对象. 先贴一段代码: public S ...
随机推荐
- mysql里max_allowed_packet的作用
MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置: 代码如下: show VAR ...
- PR回写 所有物料规划PR时对净需求+最小采购批量+安全库存+舍入值的先后考虑逻辑
所有物料规划PR时对净需求+最小采购批量+安全库存+舍入值的先后考虑逻辑20171207-1228.docx PR回写案例一: '; --SAFE_QTY:安全库存 ' ; -- MIN_LOT_SI ...
- ftp删除目录和文件,目录下有文件删除提示【550 Remove directory operation failed.】
注意:目录下有文件,直接删除目录会失败,提示550 Remove directory operation failed. 必须先将目录下的文件都删除,才能删除目录 ftp命令行: ftp删除目 ...
- 算法之LOWB三人组之插入排序
插入排序 思想:类似于抽扑克牌,共有8张扑克牌,手里默认有一张,桌面上有7张,我们每次从桌面上抽一张和手里的牌进行比较,如果比手里的牌大,则直接放到手里的牌的后面,如果比手里的牌小,则放到手里的牌的前 ...
- 求值器本质--eval&apply
最近跟着(How to Write a (Lisp) Interpreter (in Python))使用python实现了一个简易的scheme解释器.不得不说使用python这类动态语言实现不要太 ...
- 【scrapy】爬虫的时候总在提示 KeyError: 'novelLabel'
调试的时候总是提示 KeyError: 'novelLabel'然后决定断点调试一下, 在def parse_book_list(self, response):方法下,添加print(respons ...
- 【Scrapy】关于使用Scrapy框架爬虫遇到的问题1
class testScrapy(scrapy.Spider): name = "testLogs" allowed_domains=["cnblogs.com" ...
- 【selenium+python】关于使用selenium时的几个问题1
问题:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in ...
- leetcode题库解答源码(python3)
下面和大家分享本人在leetcode上已经ace的题目源码(python3): 本人会持续更新!- class Leetcode_Solution(object): def twoSum_1(self ...
- 开发增强现实(AR)教程——识别图的那些坑
第一期:Vuforia识别图的那些坑 一.Vuforia的图片识别机制 大学时学习的是计算机科学的数字媒体方向,图像处理粗略接触过,对于Vuforia的图片识别机制,只能大概讲一下步骤和猜想,无法给出 ...