[接口生成] 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:continue
                    self.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:continue
                self.str_c[t] = {
                    'content':self.create_table(t),
                    'items':[],
                    'bcontent':'',
                    'bitems':[]
                }
            if tb is None:continue
            et = 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']: continue
                    self.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: return
        
        if 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.mfbz.cn/a/477438.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java学习笔记(20)

可变参数 输入的参数数量不确定 底层就是把输入的参数放进一个数组里 只能写一个可变参数如果还有其他形参,可变参数要放在最后写 可变参数在底层就是一个数组 Collections Addall shuffle 练习 package exercise;import java.util.ArrayList; import java.util.C…

Nacos详解,从安装到服务部署,及nginx反向代理

Nacos 安装 Windows安装 下载 在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码: GitHub主页:https://github.com/alibaba/nacos GitHub的Release下载页:https://github.com/alibaba/nacos…

更新数据库表中的数据

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

Flutter 运行 flutter doctor 命令长时间未响应

由于 Flutter 运行 flutter doctor 命令,会从 pub(https://pub.dev/ 类似于 Node.js 的 npm) 上进行资源的下载,如果没有配置国内镜像,可能会由于其服务器在国外导致资源下载慢或者下载不下来,所以出现了运行 flutter doctor 命令…

权限提升-Web权限提升篇划分获取资产服务后台系统数据库管理相互转移

知识点 1、权限提升转移-分类&高低&场景 2、Web权限提升及转移-后台&数据库 3、后台权限及转移-转移对象&后台分类 章节点: 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及转移 4、域控权限提升及转移 基础点 0、为什么我们要学…

算法复杂度的介绍

算法复杂度简介 复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有…

API(时间类)

一、Date类 java.util.Date类 表示特定的瞬间,精确到毫秒。 Date常用方法: public long getTime() 把日期对象转换成对应的时间毫秒值。 public void setTime(long time) 把方法参数给定的毫秒值设…

使用布丰投针法精确计算圆周率

如果在平面上有两条距离为d的平行线,假设如果拿一根长度是L的铁针随机的丢到纸面上去,那么试问铁针与某条直线所相交的概率是多少,假设铁针的长度L是大于平行线的距离d的,这样铁针就不会同时与两条直线所相交了。 添加图片注释&am…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《基于老化成本实时次梯度的异构储能系统功率分配策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

如何进行软件测试

1、测试用例带给我们的好处 (1)测试执行者的依据 (2)使得工作可重复,自动化测试的基础 (3)评估需求覆盖率 (4)用例的复用 (5)积累测试的方法思…

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

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

Microsoft Copilot (Bing Chat)

Copilot: Your everyday AI companion (你每天的AI伙伴) Bing AI - 搜索 Microsoft Copilot: 你的日常 AI 助手 Copilot|Designer: Create images from words with AI https://www.bing.com/images/create 2024 年 1 月 23 日更新: 在微软…

软考高级:软件架构评估-质量属性概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

【Winform学习笔记(十一)】解决无边框窗体最大化显示异常问题

解决无边框窗体最大化显示异常问题 前言正文1、防止改变窗口大小时控件闪烁2、FrmMain_SizeChanged 前言 Winform 无边框窗体的设计,旨在为用户提供更加独特和个性化的界面体验,但是在实现这一设计的过程中,最大化显示异常问题往往成为开发者…

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志

日志集中审计系列(1)--- LogAuditor接收DAS设备syslog日志 前言拓扑图设备选型组网需求配置思路操作步骤结果验证前言 近期有读者留言:“因华为数通模拟器仅能支持USG6000V的防火墙,无法支持别的安全产品,导致很多网络安全的方案和产品功能无法模拟练习,是否有真机操作的…

软考高级:软件架构评估-质量属性-安全性概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Spring AI Embeddings 和 Vector 入门

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

基于Vue的社区旧衣回收利用系统的设计与实现

经济的高速发展使得每一个家庭的收入都获得了大幅增长,随之而来的就是各种梦想的逐步实现,首当其冲的就是各类衣服的更新换代而导致了大量旧衣物在家中的积存。为了帮助人们解决旧衣物处理的问题而以当前主流的互联网技术构建一个可于社区中实现旧衣回收…

VUE+Vant实现H5组织架构选人选公司组件

提醒自己: 这是之前的逻辑,或许你重新写会有更好的方法,可以参考逻辑!!! 功能介绍 1.有面包屑点击切换 2.有公司、部门、人员 3.单选、多选实现 4.编辑/回显 5.使用随意切换层级和跳转到指定层级回显等功…

Spark Rebalance hint的倾斜的处理(OptimizeSkewInRebalancePartitions)

背景 本文基于Spark 3.5.0 目前公司在做小文件合并的时候用到了 Spark Rebalance 这个算子,这个算子的主要作用是在AQE阶段的最后写文件的阶段进行小文件的合并,使得最后落盘的文件不会太大也不会太小,从而达到小文件合并的作用,…