博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqlalchemy根据数据库结构生成映射的实体
阅读量:4701 次
发布时间:2019-06-09

本文共 6274 字,大约阅读时间需要 20 分钟。

# !/usr/bin/python# -*- coding: UTF-8 -*-from sqlalchemy import *from sqlalchemy.orm import sessionmakerfrom sqlalchemy.orm import Sessionfrom 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 sessiondef 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 itemsession = 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)                           #

 

转载于:https://www.cnblogs.com/Netsharp/p/8341672.html

你可能感兴趣的文章
C#中用DateTime的ParseExact方法解析日期时间(excel中使用系统默认的日期格式)
查看>>
W3100SM-S 短信猫代码发送 上
查看>>
Linux IO模式及 select、poll、epoll详解
查看>>
Log4j知识汇总
查看>>
[译]快照技术综述 Ⅰ
查看>>
Computer Systems A Programmer's Perspective(深入理解计算机系统)第一章读书笔记
查看>>
语义分析
查看>>
httperf ---linux web站点压力测试
查看>>
hdu-5583 Kingdom of Black and White(数学,贪心,暴力)
查看>>
(4)理解 neutron ml2---port创建流程代码解析
查看>>
免费资源:Polaris UI套件 + Linecons图标集(AI, PDF, PNG, PSD, SVG)
查看>>
C# winform 使用DsoFramer 创建 显示office 文档
查看>>
找工作的一些感悟——前端小菜的成长
查看>>
C#委托和事件的应用Observer模式实例
查看>>
codevs1018 单词接龙(DFS)
查看>>
内容分发系统MediaEW:助新闻媒体转投HTML5
查看>>
HTML5 Canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
查看>>
Stanford Local Programming Contest 2011
查看>>
多线程中,NSOperationQueue和GCD的区别
查看>>
python生成.exe文件
查看>>