diff --git a/dvadmin-backend/apps/vadmin/op_drf/management/commands/inspectdb2 b/dvadmin-backend/apps/vadmin/op_drf/management/commands/inspectdb2 new file mode 100644 index 0000000..6b84e89 --- /dev/null +++ b/dvadmin-backend/apps/vadmin/op_drf/management/commands/inspectdb2 @@ -0,0 +1,46 @@ +from django.core.management.commands.inspectdb import ( + Command as InspectDBCommand, +) +from django.db import backends + + +class Command(InspectDBCommand): + db_module = 'django.db' + + def get_field_type(self, connection, table_name, row): + field_type, field_params, field_notes = super().get_field_type(connection, table_name, row) + with connection.cursor() as cursor: + columns = get_column_comment(cursor,table_name) + field_params.update({"verbose_name": columns.get(row.name)}) + + return field_type, field_params, field_notes + + +def is_mysql_cursor(cursor): + """ 检查 cursor 对应的 backends 是否为 mysql """ + return isinstance(cursor.db, backends.mysql.base.DatabaseWrapper) + + +def get_table_comment(cursor, table_name): + """ 获取表注释,仅支持 mysql """ + if not is_mysql_cursor(cursor): + return + cursor.execute(''' + SELECT table_comment + FROM information_schema.tables + WHERE table_name = %s AND table_schema = DATABASE() + ''', [table_name]) + tb = cursor.fetchone() + return tb[0] if tb else None + + +def get_column_comment(cursor, table_name): + """ 查询并返回 table 对应的注释,对于非 mysql 的游标,返回空 dict """ + if not is_mysql_cursor(cursor): + return {} + + cursor.execute(""" + SELECT column_name, column_comment + FROM information_schema.columns + WHERE table_name = %s AND table_schema = DATABASE()""", [table_name]) + return {line[0]: line[1] for line in cursor.fetchall()}