Python生成Thinkphp6代码工具类

简介: Python生成Thinkphp6代码工具类

Python生成Thinkphp6代码

# pip install pymysql
# pip install os
import pymysql
import os
# 数据库配置
db_config = {
    'host': 'IP',
    'port': 3306,
    'user': 'root',
    'password': 'PWD',
    'database': 'DBNAME',
    'charset': 'utf8mb4'
}
# 连接到数据库
connection = pymysql.connect(**db_config)
# 获取表字段
def get_table_structure(table_name):
    with connection.cursor() as cursor:
        cursor.execute(f"DESCRIBE {table_name}")
        return cursor.fetchall()
# 驼峰命名
def convert_to_camel_case(snake_str):
    components = snake_str.split('_')
    return ''.join(x.capitalize() for x in components)
# 生成model代码
def generate_model_code(table_name, columns, package_name):
    class_name = convert_to_camel_case(table_name) + "Model"
    fields = ',\n    '.join([f"'{column[0]}'" for column in columns])
    
    model_code = f"""<?php
    namespace app\\model\\{package_name};
    use think\\Model;
    class {class_name} extends Model
    {{
        protected $table = '{table_name}';
        protected $fields = [
            {fields}
        ];
    }}
    """
    return model_code
# 生成Controller代码
def generate_controller_code(table_name, columns, package_name):
    class_name = convert_to_camel_case(table_name) + "Controller"
    model_class_name = convert_to_camel_case(table_name) + "Model"
    
    controller_code = f"""<?php
    namespace app\\controller\\{package_name};
    use app\\model\\{package_name}\\{model_class_name};
    use think\\facade\\Request;
    use think\\exception\\ValidateException;
    use think\\response\\Json;
    class {class_name}
    {{
        /**
        * 获取列表(分页)
        * @return Json
        */
        public function listsAjax()
        {{
            $page = Request::get('page', 1);
            $limit = Request::get('limit', 20);
            $name = Request::get('name'); // 要查询的字段
            $whereMap = [];
            if (!empty($name)) $whereMap[] = ['name', 'like', "%{{$name}}%"];
            $model = new {model_class_name}();
            $count = $model->where($whereMap)->count();
            $data = $model->where($whereMap)->limit(($page - 1) * $limit, $limit)->select()->toArray();
            return json([
                'status' => 1,
                'msg' => '',
                'data' => [
                    'page' => $page,
                    'totalPage' => ceil($count / $limit),
                    'limit' => $limit,
                    'totalNum' => $count,
                    'data' => $data
                ]
            ]);
        }}
        /**
        * 保存信息
        * @return Json
        */
        public function saveAjax()
        {{
            $data = Request::post();
            $model = new {model_class_name}();
            try {{
                if (!empty($data['id'])) {{
                    // 更新,不允许修改创建时间
                    unset($data['create_time']);
                    $data['modified_time'] = date('Y-m-d H:i:s');
                    $result = $model->strict(false)->where('id', $data['id'])->save($data);
                }} else {{
                    unset($data['id']);  // 删除空字符串等情况下的id属性
                    // 新增表数据
                    $result = $model->strict(false)->save($data);
                }}
                if (!empty($result)) {{
                    return json([
                        'status' => 1,'msg' => '操作成功','data' => []
                    ]);
                }} else {{
                    return json([
                        'status' => 0,'msg' => '操作失败,请重试','data' => []
                    ]);
                }}
            }} catch (ValidateException $e) {{
                return json([
                    'status' => 0,'msg' => '验证失败: ' . $e->getMessage(),'data' => []
                ]);
            }} catch (\\Exception $e) {{
                return json([
                    'status' => 0,'msg' => '异常: ' . $e->getMessage(),'data' => []
                ]);
            }}
        }}
        /**
        * 删除信息
        * @return Json
        */
        public function removeAjax()
        {{
            $id = Request::post('id');
            if (empty($id)) {{
                return json([
                    'status' => 0,
                    'msg' => '参数错误',
                    'data' => []
                ]);
            }}
            $model = new {model_class_name}();
            $res = $model->where('id', $id)->delete();
            if (!empty($res)) {{
                return json([
                    'status' => 1,'msg' => '删除成功','data' => []
                ]);
            }} else {{
                return json([
                    'status' => 0,'msg' => '删除失败','data' => []
                ]);
            }}
        }}
        /**
        * 更新flag标志位
        * @return Json
        */
        public function updateFlagAjax()
        {{
            $id = Request::post('id');
            $flag = Request::post('flag');
            if (empty($id) || !isset($flag)) {{
                return json([
                    'status' => 0,'msg' => '参数错误','data' => []
                ]);
            }}
            $model = new {model_class_name}();
            $result = $model->where('id', $id)->update(['flag' => $flag,'modified_time'=>date('Y-m-d H:i:s')]);
            if (!empty($result)) {{
                return json([
                    'status' => 1,'msg' => '更新成功','data' => []
                ]);
            }} else {{
                return json([
                    'status' => 0,'msg' => '更新失败','data' => []
                ]);
            }}
        }}
    }}
    """
    return controller_code
# 生成route代码
def generate_route_code(table_name, package_name):
    controller_class_name = convert_to_camel_case(table_name) + "Controller"
    route_code = f"""<?php
    use think\\facade\\Route;
    Route::resource('{convert_to_camel_case(table_name)}', '{package_name}\\controller\\{controller_class_name}');
    """
    return route_code
# 生成文件即文件代码
def generate_code_for_table(table_name, package_name):
    columns = get_table_structure(table_name)
    model_class_name = convert_to_camel_case(table_name) + "Model"
    controller_class_name = convert_to_camel_case(table_name) + "Controller"
    
    model_code = generate_model_code(table_name, columns, package_name)
    controller_code = generate_controller_code(table_name, columns, package_name)
    route_code = generate_route_code(table_name, package_name)
    package_path = package_name.replace("\\", "/")
    model_dir = os.path.join(package_path, 'model')
    controller_dir = os.path.join(package_path, 'controller')
    route_dir = os.path.join(package_path, 'route')
    # 创建目录
    os.makedirs(model_dir, exist_ok=True)
    os.makedirs(controller_dir, exist_ok=True)
    os.makedirs(route_dir, exist_ok=True)
    
    with open(f"{model_dir}/{model_class_name}.php", "w") as model_file:
        model_file.write(model_code)
    
    with open(f"{controller_dir}/{controller_class_name}.php", "w") as controller_file:
        controller_file.write(controller_code)
    
    with open(f"{route_dir}/{convert_to_camel_case(table_name)}Route.php", "w") as route_file:
        route_file.write(route_code)
    print(f"{table_name}代码生成完毕")
def main(tables, package_name):
    table_list = tables.split(',')
    for table in table_list:
        generate_code_for_table(table.strip(), package_name)
# 执行main方法
main('tbl_name', 'packageName')
相关文章
|
1天前
|
数据处理 开发者 Python
Python中的列表推导式:一种优雅的代码简化技巧####
【10月更文挑战第15天】 本文将深入浅出地探讨Python中列表推导式的使用,这是一种强大且简洁的语法结构,用于从现有列表生成新列表。通过具体示例和对比传统循环方法,我们将揭示列表推导式如何提高代码的可读性和执行效率,同时保持语言的简洁性。无论你是Python初学者还是有经验的开发者,掌握这一技能都将使你的编程之旅更加顺畅。 ####
9 1
|
2天前
|
人工智能 IDE 测试技术
使用通义灵码提升Python开发效率:从熟悉代码到实现需求的全流程体验
作为一名Python开发者,我最近开始使用通义灵码作为开发辅助工具。它显著提高了我的工作效率,特别是在理解和修改复杂代码逻辑方面。通过AI编码助手,我能够在短时间内快速上手新项目,实现新需求,并进行代码优化,整体效率提升了60%以上。通义灵码不仅加快了代码生成速度,还增强了代码的健壮性和稳定性。
|
3天前
|
缓存 程序员 开发者
探索Python中的装饰器:一种优雅的代码增强技巧
【10月更文挑战第13天】 在本文中,我们将深入探讨Python中的装饰器,这是一种强大的工具,它允许程序员以简洁而高效的方式扩展或修改函数和类的行为。通过具体示例,我们将展示如何利用装饰器来优化代码结构,提高开发效率,并实现如日志记录、性能计时等常见功能。本文旨在为读者提供一个关于Python装饰器的全面理解,从而能够在他们的项目中灵活运用这一技术。
13 1
|
8天前
|
设计模式 开发者 Python
Python中的装饰器:简化代码与增强功能
【10月更文挑战第9天】在编程的世界里,效率和可读性是衡量代码质量的两大关键指标。Python语言以其简洁明了的语法赢得了无数开发者的青睐,而装饰器则是其独特魅力之一。本文将深入探讨装饰器的工作原理、使用方法以及如何通过自定义装饰器来提升代码的重用性和可维护性,让读者能够更加高效地编写出既优雅又功能强大的代码。
|
9天前
|
缓存 Python
探索Python中的装饰器:简化你的代码之道
【10月更文挑战第8天】在Python的世界里,装饰器就像是一把瑞士军刀,小巧却功能强大。它们能够优雅地修改函数的行为,让代码更加简洁而不失强大。本文将带你走进装饰器的奇妙世界,从基础概念到实战应用,一步步解锁装饰器的秘密,让你的Python代码更上一层楼。
|
8天前
|
设计模式 存储 缓存
Python中的装饰器:提高代码可读性和复用性
【10月更文挑战第9天】Python中的装饰器:提高代码可读性和复用性
12 1
|
8天前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
56 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
9天前
|
设计模式 测试技术 开发者
Python中的装饰器:提升代码复用与模块化的艺术
本文将带你领略Python装饰器的魔力,探索如何通过装饰器来增强函数功能而不修改其代码。我们将从装饰器的基础概念出发,逐步深入到如何在实际项目中应用装饰器,以及如何编写自定义装饰器。文章最后,我们将通过一个实例,展示装饰器在日志记录和性能测试中的应用,让你的代码更加模块化和可重用。
|
9天前
|
Python
Python实用记录(十一):出现科学计数法如何在代码中恢复
本文介绍了如何在Python中处理科学计数法,包括如何将科学计数法转换为普通数字,以及如何设置NumPy的print选项来避免科学计数法的显示。
31 1
|
10天前
|
开发者 Python
探索Python中的列表推导式:简化代码的利器
在Python编程中,列表推导式是一种简洁而强大的工具,它允许开发者以一行代码实现复杂的列表操作。本文将深入探讨列表推导式的语法、优势以及实际应用,帮助读者更好地利用这一特性来优化代码。