generate-schema.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # coding=utf-8
  2. # chatgpt 生成代码,概不负责
  3. import mysql.connector
  4. import sys
  5. import pyperclip
  6. import re
  7. # 下划线转驼峰
  8. def underscore_to_camelcase(text):
  9. parts = text.split('_')
  10. camelcase = ''.join(word.title() for word in parts)
  11. camelcase = re.sub(r'\W+', '', camelcase) # 删除非字母数字字符
  12. camelcase = camelcase[0].upper() + camelcase[1:] # 首字母小写
  13. return camelcase
  14. # 从命令行参数中获取表格名称
  15. table_name = sys.argv[1]
  16. # 连接MySQL数据库
  17. cnx = mysql.connector.connect(user='yfb', password='yfb123#',
  18. host='qqyun.ycxxkj.com', database='lechang_storage_dev', port='38006')
  19. cursor = cnx.cursor()
  20. # 定义SQL语句,获取表格列名、数据类型和注释
  21. sql = f"SELECT DISTINCT column_name, column_type, column_comment FROM information_schema.columns WHERE table_name = '{table_name}'"
  22. # 执行SQL语句
  23. cursor.execute(sql)
  24. # 获取查询结果
  25. result = cursor.fetchall()
  26. camelcase = underscore_to_camelcase(table_name)
  27. # 输出查询结果
  28. out = ''
  29. out += f'''<?php
  30. namespace app\common\model;
  31. class {camelcase} extends Base
  32. {{
  33. '''
  34. out += " protected $schema = [\n"
  35. for row in result:
  36. column_name = row[0]
  37. column_type = row[1].split("(")[0] # 去除类型中的长度信息
  38. column_comment = row[2] if row[2] else column_name
  39. out += f" '{column_name}'\t => '{column_type}',\t // {column_comment}\n"
  40. out += " ];\n"
  41. out += "}"
  42. print(out)
  43. pyperclip.copy(out.encode().decode())
  44. print('已写入粘贴板')
  45. # 关闭连接
  46. cursor.close()
  47. cnx.close()