flask-admin:从SQL查询填充表

我想通过自定义sql查询填充表格。我完全不知道如何完成此操作,扫描了flask-admin文档并在Google周围搜索,但是什么都没有出现。

我的数据库模型:

class Attrib(db.Model):
    __tablename__ = 'attribs'
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(255,u'utf8_unicode_ci'),nullable=False,unique=True)
    persistent = db.Column(db.Integer,server_default=db.FetchedValue())
    parent = db.Column(db.String(256,server_default=db.FetchedValue())
    ts = db.Column(db.DateTime,server_default=db.FetchedValue())


class Entry(db.Model):
    __tablename__ = 'entries'
    id = db.Column(db.Integer,primary_key=True)
    node_id = db.Column(db.ForeignKey(u'nodes.id',onupdate=u'CASCADE'),index=True)
    attrib_id = db.Column(db.ForeignKey(u'attribs.id',index=True)
    value = db.Column(db.String(256,index=True)
    ts = db.Column(db.DateTime,server_default=db.FetchedValue())
    attrib = db.relationship(u'Attrib',primaryjoin='Entry.attrib_id == Attrib.id',backref=u'entries')
    node = db.relationship(u'Node',primaryjoin='Entry.node_id == Node.id',backref=u'entries')


class Node(db.Model):
    __tablename__ = 'nodes'
    id = db.Column(db.Integer,unique=True)
    node_enabled = db.Column(db.Integer,nullable=False)
    wit_enabled = db.Column(db.Integer,nullable=False)
    ts = db.Column(db.DateTime,server_default=db.FetchedValue())

class WebView(db.Model):
    __tablename__ = 'overview'
    id = db.Column(db.Integer,primary_key=True)
    NODE_ID = db.Column(db.Integer,nullable=False)
    NODE = db.Column(db.String(256,u'utf8_unicode_ci'))
    LOCATION = db.Column(db.String(256,u'utf8_unicode_ci'))
    IS_CLUSTER = db.Column(db.String(256,u'utf8_unicode_ci'))
    MAN_SYS_NAME = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_CICS = db.Column(db.String(256,u'utf8_unicode_ci'))
    OS_LEVEL = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_COBOL = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_ORACLE = db.Column(db.String(256,u'utf8_unicode_ci'))
    MEM_VALUE = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_TUXEDO = db.Column(db.String(256,u'utf8_unicode_ci'))
    STORAGE_VALUE = db.Column(db.String(256,u'utf8_unicode_ci'))
    IS_LPM = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_SAP = db.Column(db.String(256,u'utf8_unicode_ci'))
    CPU_VALUE = db.Column(db.String(256,u'utf8_unicode_ci'))
    CLUSTER_RGS = db.Column(db.String(256,u'utf8_unicode_ci'))
    HA_LEVEL = db.Column(db.String(256,u'utf8_unicode_ci'))
    CLUSTER_NODES = db.Column(db.String(256,u'utf8_unicode_ci'))
    CLUSTER_NAME = db.Column(db.String(256,u'utf8_unicode_ci'))
    CPU_POOL = db.Column(db.String(256,u'utf8_unicode_ci'))
    AME_FactOR = db.Column(db.String(256,u'utf8_unicode_ci'))
    SYS_PROFILE = db.Column(db.String(256,u'utf8_unicode_ci'))
    INFO_MAIL = db.Column(db.String(256,u'utf8_unicode_ci'))
    HOSTNAME = db.Column(db.String(256,u'utf8_unicode_ci'))
    OS_TYPE = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java6_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java7_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java8_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java5_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java8 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java5 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java14 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java7 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java71 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java71_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java14_64 = db.Column(db.String(256,u'utf8_unicode_ci'))
    Java6 = db.Column(db.String(256,u'utf8_unicode_ci'))
    UPTIME = db.Column(db.String(256,u'utf8_unicode_ci'))
    IP = db.Column(db.String(256,u'utf8_unicode_ci'))
    IP_LONG = db.Column(db.String(256,u'utf8_unicode_ci'))
    CLUSTER_nodename = db.Column(db.String(256,u'utf8_unicode_ci'))
    RG_SERVICE_IP_LONG = db.Column(db.String(256,u'utf8_unicode_ci'))
    HAS_snA = db.Column(db.String(256,u'utf8_unicode_ci'))


我的模型视图:

class AixOverview(ModelView):
       column_list = ('NODE','LOCATION','OS_TYPE','OS_LEVEL','HA_LEVEL','CLUSTER_NAME','CPU_POOL','CPU_VALUE','MEM_VALUE','INFO_MAIL')
       column_searchable_list = ('NODE',)
       column_filters = ('NODE','IS_CLUSTER','IS_LPM','CLUSTER_RGS','CLUSTER_NODES','HAS_ORACLE','HAS_COBOL','HAS_CICS','HAS_snA','HAS_TUXEDO','HAS_SAP')
       #column_editable_list = ('NODE',)
       column_display_pk = True
       column_hide_backrefs = False
       can_create = True
       can_edit = True
       can_delete = True
       can_export = True
       list_template = 'my_aix_admin_index.html'

class AixNodes(ModelView):
    column_display_pk = True
    column_hide_backrefs = False
    column_list = [c_attr.key for c_attr in inspect(Node).mapper.column_attrs]
    #can_create = False
    #can_edit = False
    #can_delete = True
    #can_export = True
    #column_filters = ('node_enabled','wit_enabled')
    #column_searchable_list = ('name',)
    #column_editable_list = ('name','node_enabled','wit_enabled')
    #column_list = ['name','wit_enabled','ts']
    #form_columns = [Entry.attrib_id,Entry.node_id]
    #column_auto_select_related = True

class AixAttributes(ModelView):
    column_display_pk = True
    column_hide_backrefs = False
    column_list = [c_attr.key for c_attr in inspect(Attrib).mapper.column_attrs]
    #can_create = False
    #can_edit = False
    #can_delete = False
    #can_export = True
    #column_filters = ('persistent','parent')
    #column_searchable_list = ('name','persistent','parent')

class AixEntries(ModelView):
    column_display_pk = True
    column_hide_backrefs = False
    column_list = [c_attr.key for c_attr in inspect(Entry).mapper.column_attrs]
    def __str__(self):
        return self.text
    #can_create = False
    #can_edit = False
    #can_delete = False
    #can_export = True
    #column_list = ['value','ts']
    #column_searchable_list = ('value',)
    #column_editable_list = ('value',)
    #column_filters = ('value',)

这一切都很好,因为我可以进行CRUD操作,但我仍然是一个绝对的谜 如何使用以下sql填充“概述”表。所以我在哪里/如何运行此查询?

select `n`.`id` AS `NODE_ID`,`n`.`name` AS `NODE`,max(if((`a`.`name` = 'LOCATION'),`e`.`value`,NULL)) AS `LOCATION`,max(if((`a`.`name` = 'IS_CLUSTER'),NULL)) AS `IS_CLUSTER`,max(if((`a`.`name` = 'MAN_SYS_NAME'),NULL)) AS `MAN_SYS_NAME`,max(if((`a`.`name` = 'HAS_CICS'),NULL)) AS `HAS_CICS`,max(if((`a`.`name` = 'OS_LEVEL'),NULL)) AS `OS_LEVEL`,max(if((`a`.`name` = 'HAS_COBOL'),NULL)) AS `HAS_COBOL`,max(if((`a`.`name` = 'HAS_ORACLE'),NULL)) AS `HAS_ORACLE`,max(if((`a`.`name` = 'MEM_VALUE'),NULL)) AS `MEM_VALUE`,max(if((`a`.`name` = 'HAS_TUXEDO'),NULL)) AS `HAS_TUXEDO`,max(if((`a`.`name` = 'STORAGE_VALUE'),NULL)) AS `STORAGE_VALUE`,max(if((`a`.`name` = 'IS_LPM'),NULL)) AS `IS_LPM`,max(if((`a`.`name` = 'HAS_SAP'),NULL)) AS `HAS_SAP`,max(if((`a`.`name` = 'CPU_VALUE'),NULL)) AS `CPU_VALUE`,max(if((`a`.`name` = 'CLUSTER_RGS'),NULL)) AS `CLUSTER_RGS`,max(if((`a`.`name` = 'HA_LEVEL'),NULL)) AS `HA_LEVEL`,max(if((`a`.`name` = 'CLUSTER_NODES'),NULL)) AS `CLUSTER_NODES`,max(if((`a`.`name` = 'CLUSTER_NAME'),NULL)) AS `CLUSTER_NAME`,max(if((`a`.`name` = 'CPU_POOL'),NULL)) AS `CPU_POOL`,max(if((`a`.`name` = 'AME_FactOR'),NULL)) AS `AME_FactOR`,max(if((`a`.`name` = 'SYS_PROFILE'),NULL)) AS `SYS_PROFILE`,max(if((`a`.`name` = 'INFO_MAIL'),NULL)) AS `INFO_MAIL`,max(if((`a`.`name` = 'HOSTNAME'),NULL)) AS `HOSTNAME`,max(if((`a`.`name` = 'OS_TYPE'),NULL)) AS `OS_TYPE`,max(if((`a`.`name` = 'Java6_64'),NULL)) AS `Java6_64`,max(if((`a`.`name` = 'Java7_64'),NULL)) AS `Java7_64`,max(if((`a`.`name` = 'Java8_64'),NULL)) AS `Java8_64`,max(if((`a`.`name` = 'Java5_64'),NULL)) AS `Java5_64`,max(if((`a`.`name` = 'Java8'),NULL)) AS `Java8`,max(if((`a`.`name` = 'Java5'),NULL)) AS `Java5`,max(if((`a`.`name` = 'Java14'),NULL)) AS `Java14`,max(if((`a`.`name` = 'Java7'),NULL)) AS `Java7`,max(if((`a`.`name` = 'Java71'),NULL)) AS `Java71`,max(if((`a`.`name` = 'Java71_64'),NULL)) AS `Java71_64`,max(if((`a`.`name` = 'Java14_64'),NULL)) AS `Java14_64`,max(if((`a`.`name` = 'Java6'),NULL)) AS `Java6`,max(if((`a`.`name` = 'UPTIME'),NULL)) AS `UPTIME`,max(if((`a`.`name` = 'IP'),NULL)) AS `IP`,max(if((`a`.`name` = 'IP_LONG'),NULL)) AS `IP_LONG`,max(if((`a`.`name` = 'CLUSTER_nodename'),NULL)) AS `CLUSTER_nodename`,max(if((`a`.`name` = 'RG_SERVICE_IP_LONG'),NULL)) AS `RG_SERVICE_IP_LONG`,max(if((`a`.`name` = 'HAS_snA'),NULL)) AS `HAS_snA` from ((`aix_registry`.`entries` `e` left join `aix_registry`.`nodes` `n` on((`n`.`id` = `e`.`node_id`))) left join `aix_registry`.`attribs` `a` on((`a`.`id` = `e`.`attrib_id`))) where (`a`.`parent` = 'NODE') group by `n`.`name` order by `n`.`id`
tx5897932 回答:flask-admin:从SQL查询填充表

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3145337.html

大家都在问