Files
2026-06-08 18:14:59 +08:00

259 lines
6.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
数据库管理Schema
"""
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, Field
# ============ 数据库相关 ============
class DatabaseInfo(BaseModel):
"""数据库信息"""
name: str
owner: Optional[str] = None
encoding: Optional[str] = None
collation: Optional[str] = None
size: Optional[str] = None
size_bytes: Optional[int] = None
tables_count: Optional[int] = None
description: Optional[str] = None
class DatabaseCreateIn(BaseModel):
"""创建数据库输入"""
name: str
owner: Optional[str] = None
encoding: Optional[str] = "UTF8"
charset: Optional[str] = "utf8mb4" # MySQL
collation: Optional[str] = None
template: Optional[str] = "template0" # PostgreSQL
class DatabaseRenameIn(BaseModel):
"""重命名数据库输入(PostgreSQL)"""
new_name: str
class DatabaseOperationOut(BaseModel):
"""数据库操作输出"""
success: bool
message: str
# ============ Schema相关(PostgreSQL ============
class SchemaInfo(BaseModel):
"""Schema信息"""
name: str
owner: Optional[str] = None
tables_count: Optional[int] = None
class SchemaCreateIn(BaseModel):
"""创建Schema输入(PostgreSQL"""
name: str
database: Optional[str] = None
owner: Optional[str] = None
class SchemaRenameIn(BaseModel):
"""重命名Schema输入(PostgreSQL"""
new_name: str
database: Optional[str] = None
class SchemaOperationOut(BaseModel):
"""Schema操作输出"""
success: bool
message: str
# ============ 表相关 ============
class TableInfo(BaseModel):
"""表信息"""
schema_name: Optional[str] = None
table_name: str
table_type: Optional[str] = "BASE TABLE"
row_count: Optional[int] = None
total_size: Optional[str] = None
total_size_bytes: Optional[int] = None
table_size: Optional[str] = None
table_size_bytes: Optional[int] = None
indexes_size: Optional[str] = None
indexes_size_bytes: Optional[int] = None
data_length: Optional[int] = None # MySQL
index_length: Optional[int] = None # MySQL
description: Optional[str] = None
# ============ 视图相关 ============
class ViewInfo(BaseModel):
"""视图信息"""
schema_name: Optional[str] = None
view_name: str
view_definition: Optional[str] = None
is_updatable: Optional[bool] = None
check_option: Optional[str] = None
view_type: Optional[str] = "VIEW"
description: Optional[str] = None
class ViewColumn(BaseModel):
"""视图列信息"""
column_name: str
data_type: str
is_nullable: Optional[bool] = None
ordinal_position: Optional[int] = None
description: Optional[str] = None
class ViewStructure(BaseModel):
"""视图结构详情"""
view_info: ViewInfo
columns: List[ViewColumn]
dependencies: List[str]
definition_sql: str
# ============ 列信息 ============
class ColumnInfo(BaseModel):
"""字段信息"""
column_name: str
data_type: str
is_nullable: bool
column_default: Optional[str] = None
character_maximum_length: Optional[int] = None
numeric_precision: Optional[int] = None
numeric_scale: Optional[int] = None
ordinal_position: Optional[int] = None
is_primary_key: bool = False
is_unique: bool = False
description: Optional[str] = None
class IndexInfo(BaseModel):
"""索引信息"""
index_name: str
index_type: Optional[str] = None
columns: str
is_unique: bool = False
is_primary: bool = False
definition: Optional[str] = None
class ConstraintInfo(BaseModel):
"""约束信息"""
constraint_name: str
constraint_type: str
columns: Optional[str] = None
definition: Optional[str] = None
referenced_table: Optional[str] = None
referenced_columns: Optional[str] = None
class TableStructure(BaseModel):
"""表结构详情"""
table_info: TableInfo
columns: List[ColumnInfo]
indexes: List[IndexInfo]
constraints: List[ConstraintInfo]
# ============ 数据查询相关 ============
class QueryDataIn(BaseModel):
"""查询数据输入"""
table_name: str
schema_name: Optional[str] = None
database: Optional[str] = None
page: int = 1
page_size: int = 20
where: Optional[str] = None
order_by: Optional[str] = None
class QueryDataOut(BaseModel):
"""查询数据输出"""
columns: List[str]
rows: List[Dict[str, Any]]
total: int
page: int
page_size: int
# ============ SQL执行相关 ============
class ExecuteSQLIn(BaseModel):
"""执行SQL输入"""
sql: str
is_query: bool = True
class ExecuteSQLOut(BaseModel):
"""执行SQL输出"""
success: bool
message: str
columns: Optional[List[str]] = None
rows: Optional[List[Dict[str, Any]]] = None
affected_rows: Optional[int] = None
execution_time: float
# ============ 数据操作相关 ============
class InsertDataIn(BaseModel):
"""插入数据"""
table_name: str
schema_name: Optional[str] = None
data: Dict[str, Any]
class UpdateDataIn(BaseModel):
"""更新数据"""
table_name: str
schema_name: Optional[str] = None
data: Dict[str, Any]
where: str
class DeleteDataIn(BaseModel):
"""删除数据"""
table_name: str
schema_name: Optional[str] = None
where: str
class DataOperationOut(BaseModel):
"""数据操作输出"""
success: bool
message: str
affected_rows: int
# ============ DDL操作相关 ============
class ExecuteDDLIn(BaseModel):
"""执行DDL输入"""
sql: str = Field(..., description="DDL SQL语句")
database: Optional[str] = Field(None, description="数据库名")
schema_name: Optional[str] = Field(None, description="Schema名")
class ExecuteDDLOut(BaseModel):
"""执行DDL输出"""
success: bool = Field(..., description="是否成功")
message: str = Field(..., description="执行消息")
affected_rows: int = Field(default=0, description="影响行数")
# ============ 数据库配置相关 ============
class DatabaseConfig(BaseModel):
"""数据库配置信息"""
db_name: str
name: str
db_type: str
host: str
port: int
database: str
user: str
has_password: bool
is_system: bool = False
display_name: Optional[str] = None