259 lines
6.3 KiB
Python
259 lines
6.3 KiB
Python
#!/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
|