[接口生成] 1. 数据库生成

我们在做页面的时候, 一般都要和数据相适应,这个时候就需要去修改数据库, 至少需要数据库相关的人员配合, 改来改去的容易产生一些版本遗留问题。

就算是我一个人开发, 一会儿搞前端,一会儿搞后台, 也是感觉麻烦,容易出错。

所以打算搞一个接口生成的工具, 有的时候查询表格就直接代码生成出来, 如果有逻辑,就将逻辑独立出来,然后代码生成的时候融入进去, 这样修改起来也就更简单一些。

这个模块是表格生成部分的示例代码, 项目还在开发, 可能有些地方还是太理想化了, 会出现一些难以解决的问题而将项目终止掉, 但是不努力尝试怎么会知道会不会成功呢, 给自己加油@1711065015。

class gen_table:# 记录一些表格基本数据ctab = '    'str_c = {}# 创建一张新表def create_table(self, tn):return (f'class {tn[0].upper()}{tn[1:]}(db.Model):\n'f'{self.ctab} __tablename__ = "{tn}"\n'f'{self.ctab}__id_ = db.Column(db.Integer, auto_incread=True, primary_key=True)\n')# 表格生成def gen(self, se):ts = se.split('.')for i in range(len(ts)-1): #[:-1]:t = ts[i].strip()tb = ts[i-1].strip() if i > 0 else None if t[0] == '(' and t[-1] == ')':et = t[1:-1].split(',')for e in et:if e in self.str_c:continueself.str_c[e] = {'content':self.create_table(e.strip()),'items':[],'bcontent':'','bitems':[]}elif t not in self.str_c:# if t in self.str_c:continueself.str_c[t] = {'content':self.create_table(t),'items':[],'bcontent':'','bitems':[]}if tb is None:continueet = tb[1:-1].split(',')    if tb[0] == '(' and tb[-1] == ')':if et is None: continue for e in et:e = e.strip()if f'__{e}_id_' in self.str_c[t]['items']: continueself.str_c[t]['content'] += f"{self.ctab}__{e}_id_ = db.Column(db.Integer, db.ForeignKey('{e}.id'), nullable=False)\n"self.str_c[t]['items'].append(f'__{e}_id_')else:if f'__{tb}_id_' in self.str_c[t]['items']: continue# print(t)self.str_c[t]['content'] += f"{self.ctab}__{tb}_id_ = db.Column(db.Integer, db.ForeignKey('{tb}.id'), nullable=False)\n"self.str_c[t]['items'].append(f'__{tb}_id_')if ts[-2] not in self.str_c: returnif ts[-2] not in self.str_c[ts[-2]]['bitems']:self.str_c[ts[-2]]['bcontent'] += f"{self.ctab}_{ts[-1]} = db.Column(db.String)\n"self.str_c[ts[-2]]['bitems'].append(ts[-2])
# 测试
bstr = ['x.c','x.b.c','(x,y).b.c']
gt = gen_table()
for b in bstr:gt.gen(b)
# 打印
for e in gt.str_c:print(gt.str_c[e]['content'],end='')  print(gt.str_c[e]['bcontent'])    
# 执行输出class X(db.Model):__tablename__ = "x"__id_ = db.Column(db.Integer, auto_incread=True, primary_key=True)_c = db.Column(db.String)class B(db.Model):__tablename__ = "b"__id_ = db.Column(db.Integer, auto_incread=True, primary_key=True)__x_id_ = db.Column(db.Integer, db.ForeignKey('x.id'), nullable=False)__y_id_ = db.Column(db.Integer, db.ForeignKey('y.id'), nullable=False)_c = db.Column(db.String)class Y(db.Model):__tablename__ = "y"__id_ = db.Column(db.Integer, auto_incread=True, primary_key=True)

代码里面还没有添加表格元素类型的定义, 后面再优化, 期待大家评论区讨论和代码完成的时候能够和大家一起测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jupyter Notebook介绍、安装及使用教程

Jupyter Notebook介绍、安装及使用教程 一、什么是Jupyter Notebook?简介组成部分网页应用文档Jupyter Notebook的主要特点 二、安装Jupyter Notebook先试用,再决定安装安装前提使用Anaconda安装使用pip命令安装 三、运行Jupyter Notebook帮助启动默认端…

Python 解决大文件的写入但查看却生效不及时的问题

文章目录 1. 问题2. 原因3. 解决方法4. 补充 flush() 介绍4.1 语法4.2 说明4.3 示例4.4 使用场景 1. 问题 在写入大文件内容时,程序还没有结束,如下在运行: with open("xxx", "a") as f:... # 你的逻辑f.write("x…

macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题

如果你通过 sudo port install 命令正常安装了 MySQL,再通过 sudo port load 命令启动了 MySQL Server,此刻却发现使用 Navicat 之类的 GUI 软件无法连接,始终返回无法连接到 127.0.0.1 服务器。这是一个小坑,因为他默认使用了 So…

Linux创建软连接后,无法直接调用的原因和解决办法

我自己遇到的问题: 进入到主目录: cd 创建一个main软连接后: ln -s /home/user01/demo01.py main 执行: main 没反应。 试了下发现是调用方法的问题,因为main是主目录下的一个软链接,所以调用方式应该是&…

linux 串口通讯模板

RAW模式与非RAW模式 RAW 模式: 简单的来说,就是发送端发动的二进制码原封不动的被接收端接收。 若干年前使用Windows下的串口调试助手对单片机串口进行调试就是使用的 RAW 模式, 单片机发送的数据被原封不动的发送给 PC 端,PC 端…

零代码编程:用kimichat将srt字幕文件进行批量转换合并

文件夹里面有多个srt字幕文件,借助kimichat可以很方便的对其进行批量合并。 在kimichat中输入提示词: 你是一个Python编程专家,写一个Python脚本,完成一个处理整理文档内容的任务,具体步骤如下: 打开文件…

更新数据库表中的数据

目录 update 加上各种限制条件 update update 表名set 列名1xx,列名2xx 指定更新某列数据如果不添加where子句,则为全列更新 也可以在原有基础上更新: 注意,mysql语法里不支持,必须是列名列名数值 加上各种限制条件 比如加上order by子句,where子句,limit等 这些条件对于up…

【FLOOD FILL专题】【蓝桥杯备考训练】:扫雷、动态网格、走迷宫、画图、山峰和山谷【已更新完成】

目录 1、扫雷(Google Kickstart2014 Round C Problem A) 2、动态网格(Google Kickstart2015 Round D Problem A) 3、走迷宫(模板) 4、画图(第六次CCF计算机软件能力认证) 5、山…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(四)—— 过拟合和欠拟合

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 通过增加容量或提前停止来提高性能。 在深度学习中&#…

2024年奥莱利科技趋势报告解析

2024年O’Reilly技术趋势报告解读 概述 在快速发展的技术领域,跟上最新趋势对行业内的任何人来说都至关重要。2024年O’Reilly技术趋势报告在此方面提供了关键的指导,全面概述了最重要的技术进步和模式。该年度报告基于O’Reilly著名在线学习平台280万…

C#对于文件中的文件名判断问题

C#中对于文件名的判断问题,我们使用bool值进行值的传递,首先我们使用内置方法进行文件字符串匹配的bool值回传,我们打印出文件名以及相对应的bool,即可知道文件名是否真正生效 bool isHave fileName.Contains("Hello"…

shell和linux的关系

Shell 和 Linux 之间存在密切的关系,但它们并不是同一个东西。让我们分别了解一下它们: Linux: Linux 是一个自由和开放源代码的类UNIX操作系统。 Linux 的内核由林纳斯托瓦兹(Linus Torvalds)于1991年首次发布&…

代码学习记录22--回溯算法第三天

随想录日记part22 t i m e : time: time: 2024.03.17 主要内容:今天主要是结合类型的题目加深对回溯算法的理解:1.组合总和;2.组合总和 ;3.分割回文串。 39. 组合总和 40.组合总和II131.分割回文串 Topic1组合总和 题…

【Node.js从基础到高级运用】十四、Node.js 错误处理与日志记录

引言 在这篇博客文章中,我们将深入探讨Node.js中的错误处理和日志记录的最佳实践。我们会了解如何在Node.js应用程序中有效地捕获和处理错误,并利用日志库如morgan来记录应用程序的活动和错误信息。 第1部分:Node.js中的错误处理 同步代码中…

推荐的Kubernetes 学习资料

官方文档: Kubernetes 官方文档:https://kubernetes.io/docs/Kubernetes 教程:https://kubernetes.io/docs/tutorials/ 书籍: Kubernetes in Action,Marko Luksa 著Kubernetes Up and Running,Kelsey Hi…

Spring AI Embeddings 和 Vector 入门

在前面 Spring AI Chat 简单示例 中介绍了 Chat 的基本用法,本文在此基础(主要是pom.xml)上继续探索 Embedding 和 Vector。 官方文档: embeddings: https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embedding…

断点重训教程:如何有效地保护深度学习模型训练进度

在深度学习领域,长时间训练是常见的需求,然而,在训练过程中可能会面临各种意外情况,比如计算机故障、断电等,这些意外情况可能导致训练过程中断,造成已经投入的时间和资源的浪费。为了应对这种情况&#xf…

「Linux系列」有关Shell数组/运算符的故事

文章目录 一、Shell 数组运用1. 定义数组2. 访问数组元素3. 获取数组长度4. 遍历数组5. 追加元素到数组6. 删除数组元素7. 数组切片8. 综合示例:统计数组中元素的个数9. 关联数组(Bash 4.0及以上版本) 二、Shell 基本运算符1. 数值运算符2. 字…

Avue框架实现图表的基本知识 | 附Demo(全)

目录 前言1. 柱状图2. 折线图3. 饼图4. 刻度盘6. 仪表盘7. 象形图8. 彩蛋8.1 饼图8.2 柱状图8.3 折线图8.4 温度仪表盘8.5 进度条 前言 以下Demo,作为初学者来说,会相应给出一些代码注释,可相应选择你所想要的款式 对于以下Demo&#xff0c…

GStreamer简单看看

主要是现在弄摄像头,要用到这东西。所以学学。 最权威主页:GStreamer: open source multimedia framework 大概看了下,好像命令也不难。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw,formatYUY2,width640,height480,framerat…