在工作中,会导出一份mysql的html来查看,用的是就是路过秋天大神的那个工具,所以想自己用那个样式直接在后端写一个页面做展示!

前端页面

  1. from flask import Flask,request,render_template
  2. from flask_sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' #这里用这个是不行的 注意修改为mysql 才可以正常使用
  5. db = SQLAlchemy(app)
  6.  
  7. @app.route("/listModel", methods=["GET"])
  8. def listModel():
  9. dbName = request.args.get("dbname","xx")
  10. tableStr = """select table_name,table_comment from information_schema.tables where TABLE_TYPE='BASE TABLE' and table_schema='{}'""".format(
  11. dbName)
  12. resultList = db.engine.execute(tableStr)
  13. _infoList = []
  14. if resultList:
  15. for index, result in enumerate(resultList):
  16. tableName = result[0]
  17. filedStr = """select ORDINAL_POSITION,column_name,COLUMN_COMMENT,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,numeric_precision,numeric_scale,COLUMN_KEY,COLUMN_DEFAULT,IS_NULLABLE from information_schema.columns where table_schema='{}' and table_name='{}'""".format(
  18. dbName, tableName)
  19. filedList = db.engine.execute(filedStr)
  20. _infolist = []
  21. if filedList:
  22. for field in filedList:
  23. if field[5]:
  24. CHARACTER_MAXIMUM_LENGTH = field[5]
  25. elif field[4]:
  26. CHARACTER_MAXIMUM_LENGTH = field[4]
  27. else:
  28. CHARACTER_MAXIMUM_LENGTH = 0
  29. if field[9] == "YES":
  30. IS_NULLABLE = "Y"
  31. else:
  32. IS_NULLABLE = "N"
  33. _infoDict = {
  34. "ORDINAL_POSITION": field[0],
  35. "column_name": field[1],
  36. "COLUMN_COMMENT": field[2],
  37. "DATA_TYPE": field[3],
  38. "CHARACTER_MAXIMUM_LENGTH": CHARACTER_MAXIMUM_LENGTH,
  39. "numeric_scale": field[6] if field[6] else 0,
  40. "COLUMN_KEY": "Y" if field[7] else "",
  41. "COLUMN_DEFAULT": field[8] if field[8] else "",
  42. "IS_NULLABLE": IS_NULLABLE,
  43. }
  44. _infolist.append(_infoDict)
  45. infoDict = {
  46. "index": index + 1,
  47. "tableName": tableName,
  48. "table_comment": result[1],
  49. "fields": _infolist
  50. }
  51. _infoList.append(infoDict)
  52. return render_template("demos.html", rows=_infoList,dbName=dbName)
  53.  
  54. if __name__ == '__main__':
  55. app.run()

然后是 html 静态页面

  1. ### html
  2.  
  3. <html>
  4. <head><title>数据库设计文档 -- {{ dbName }}</title>
  5. <style type='text/css'>body, td {
  6. font-family: verdana;
  7. font-size: 12px;
  8. line-height: 150%;
  9. }
  10.  
  11. table {
  12. width: 100%;
  13. background-color: #ccc;
  14. margin: 5px 0;
  15. }
  16.  
  17. td {
  18. background-color: #fff;
  19. padding: 3px;
  20. padding-left: 10px;
  21. }
  22.  
  23. thead td {
  24. text-align: center;
  25. font-weight: bold;
  26. background-color: #eee;
  27. }
  28.  
  29. a:link, a:visited, a:active {
  30. color: #015FB6;
  31. text-decoration: none;
  32. }
  33.  
  34. a:hover {
  35. color: #E33E06;
  36. }</style>
  37. </head>
  38. <body style='text-align:center;background-image: url("{{ url_for("static",filename='18066.jpg') }}")'>
  39. <div style='width:800px; margin:20px auto; text-align:left;'>
  40. <a name='index'>
  41. <H2 style='text-align:center; line-height:50px;'>数据库设计文档</H2>
  42. <div><b>数据库名:{{ dbName }}</b></div>
  43. <table cellspacing='' cellpadding=''>
  44. <thead>
  45. <tr>
  46. <td style='width:40px; '>序号</td>
  47. <td>表名</td>
  48. <td>说明</td>
  49. </tr>
  50. </thead>
  51. {% for x in rows %}
  52. <tr>
  53. <td style='text-align:center;'>{{ x.index }}</td>
  54. <td><a href='#{{ x.tableName }}'>{{ x.tableName }}</a></td>
  55. <td>{{ x.table_comment }}</td>
  56. </tr>
  57. {% endfor %}
  58. </table>
  59. </a>
  60. {% for x in rows %}
  61. <a name='{{ x.tableName }}'></a>
  62. <div style='margin-top:30px;'><a href='#index'
  63. style='float:right; margin-top:6px;'>返回目录</a><b>表名:{{ x.tableName }}</b>
  64. </div>
  65. <div>说明:{{ x.table_comment }}</div>
  66. <div>数据列:</div>
  67. <table cellspacing='' cellpadding=''>
  68. <thead>
  69. <tr>
  70. <td style='width:40px; '>序号</td>
  71. <td>名称</td>
  72. <td>数据类型</td>
  73. <td>长度</td>
  74. <td>小数位</td>
  75. <td>允许空值</td>
  76. <td>主键</td>
  77. <td>默认值</td>
  78. <td>说明</td>
  79. </tr>
  80. </thead>
  81. {% for z in x.fields %}
  82. <tr>
  83. <td style='text-align:center;'>{{ z.ORDINAL_POSITION }}</td>
  84. <td>{{ z.column_name }}</td>
  85. <td align='center'>{{ z.DATA_TYPE }}</td>
  86. <td align='center'>{{ z.CHARACTER_MAXIMUM_LENGTH }}</td>
  87. <td align='center'>{{ z.numeric_scale }}</td>
  88. <td align='center'>{{ z.IS_NULLABLE }}</td>
  89. <td align='center'>{{ z.COLUMN_KEY }}</td>
  90. <td>{{ z.COLUMN_DEFAULT }}</td>
  91. <td>{{ z.COLUMN_COMMENT }}</td>
  92. </tr>
  93. {% endfor %}
  94. </table>
  95. {% endfor %}
  96. </div>
  97. </body>
  98. </html>

flask下直接展示mysql数据库 字段的更多相关文章

  1. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  2. Linux下定时备份MySQL数据库的Shell脚本

    Linux下定时备份MySQL数据库的Shell脚本   对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...

  3. Flask项目中使用mysql数据库启动项目是发出警告

    Flask项目中使用mysql数据库启动项目是发出警告: Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA ...

  4. CentOS 6.3下Zabbix监控MySQL数据库参数

    系统环境:CentOS 6.3 x64  http://www.linuxidc.com/Linux/2012-12/76583.htm mysql:    mysql-5.6.10 http://w ...

  5. Flask与mysql数据库字段类型的区别以及基本用法

    Mysql里面的int在Flask中里面使用Integer Mysql里面的varcahar在Flask中里面使用String 与Mysql数据库需要导入模块 #导入第三方链接库sql点金术 from ...

  6. *CentOS下简单的MySQL数据库操作

    1.登录成功之后退出的话,直接输入quit或者exit即可.

  7. Elasticsearch学习(2) windows环境下Elasticsearch同步mysql数据库

    在上一章中,我们已经能够通过spring boot来使用Elasticsearch,但是由于我们习惯性的将数据写入mysql,所以为了解决这个问题,Elasticsearch为我们提供了一个插件log ...

  8. Linux下C++访问MySQL数据库

    由于想要开始了解并学习用LAMP进行web开发,所以昨晚我在Fedora上安装了MySQL,学习了MySQL的几个常用命令.想着在学习进行web开发(PHP访问数据库)之前,先用我熟悉的C++连接数据 ...

  9. CentOS6.5下简单的MySQL数据库操作

    1.登录成功之后退出的话,直接输入quit或者exit即可.

随机推荐

  1. 实战:IDEA运行速度调优

    序言 可能大家觉得系统调优一般都是针对服务端应用而言的,普通Java开发人员很少有机会实践.今天就通用一个Java开发人员日常工作中经常使用的开发工具开做一次调优实战. 我在日常工作中的主要IDE工具 ...

  2. 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!

    Python 程序员深度学习的"四大名著": 这四本书着实很不错!我们都知道现在机器学习.深度学习的资料太多了,面对海量资源,往往陷入到"无从下手"的困惑出境. ...

  3. Python实用笔记 (4)循环

    for...in循环 names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name) 运行如下: Michael Bob Trac ...

  4. Python实用笔记 (7)高级特性——切片

    列表L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素 >>> L[0:3] ['Michael', 'Sarah', ' ...

  5. 补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.

    补充:回答网友的问题,如何不用路径,而直接将CImage画到DC中,之后DC一起显示.注释掉 pDC->BeginPath(); // 打开路径层 pDC->Rectangle(0,0,p ...

  6. CentOS 7 内核更新后删除旧内核(转载)

    CentOS 7 内核更新后删除旧内核 0.当前 # uname -sr Linux 3.10.0-123.20.1.el7.x86_64 1.搜索查询 # rpm -q kernel kernel- ...

  7. RSS阅读器推荐

    http://www.feeddemon.com/ Windows,Free (完)

  8. tomcat结合shiro无文件webshell的技术研究以及检测方法

    0x01简介 shiro结合tomcat回显,使用公开的方法,回显大多都会报错.因为生成的payload过大,而tomcat在默认情况下,接收的最大http头部大小为8192.如果超过这个大小,则to ...

  9. HotSpot的类模型(2)

    在前一篇文章 HotSpot的二分模型中已经讲过,HotSpot采用了OOP-Klass模型描述Java的类和对象.Klass模型采用Klass类及相关子类来表示具体的Java类,可以理解这些类为Ja ...

  10. 状压DP之互不侵犯

    题目描述 这里 在\(N*N\) 的棋盘里面放\(k\)个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式 只有 ...