From 36b164d421c2a153ba0da5d3836083f2cd034094 Mon Sep 17 00:00:00 2001 From: everhopingandwaiting Date: Tue, 7 Dec 2021 15:24:00 +0000 Subject: [PATCH] =?UTF-8?q?add=20dvadmin-backend/apps/vadmin/op=5Fdrf/mana?= =?UTF-8?q?gement/commands/inspectdb2.=20inspectdb2=20=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20=E7=94=9F=E6=88=90=E7=9A=84model=20?= =?UTF-8?q?=E5=B8=A6=E6=9C=89=20verbose=5Fname=E6=B3=A8=E9=87=8A=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../op_drf/management/commands/inspectdb2 | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 dvadmin-backend/apps/vadmin/op_drf/management/commands/inspectdb2 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()}