Files
SQLBot/backend/apps/datasource/models/datasource.py
T
2025-07-17 15:49:22 +08:00

128 lines
3.7 KiB
Python

from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel
from sqlalchemy import Column, Text, BigInteger, DateTime, Integer, Identity
from sqlmodel import SQLModel, Field
class CoreDatasource(SQLModel, table=True):
__tablename__ = "core_datasource"
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
name: str = Field(max_length=128, nullable=False)
description: str = Field(max_length=512, nullable=True)
type: str = Field(max_length=64)
type_name: str = Field(max_length=64, nullable=True)
configuration: str = Field(sa_column=Column(Text))
create_time: datetime = Field(sa_column=Column(DateTime(timezone=False), nullable=True))
create_by: int = Field(sa_column=Column(BigInteger()))
status: str = Field(max_length=64, nullable=True)
num: str = Field(max_length=256, nullable=True)
oid: int = Field(sa_column=Column(BigInteger()))
class CoreTable(SQLModel, table=True):
__tablename__ = "core_table"
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
ds_id: int = Field(sa_column=Column(BigInteger()))
checked: bool = Field(default=True)
table_name: str = Field(sa_column=Column(Text))
table_comment: str = Field(sa_column=Column(Text))
custom_comment: str = Field(sa_column=Column(Text))
class CoreField(SQLModel, table=True):
__tablename__ = "core_field"
id: int = Field(sa_column=Column(Integer, Identity(always=True), nullable=False, primary_key=True))
ds_id: int = Field(sa_column=Column(BigInteger()))
table_id: int = Field(sa_column=Column(BigInteger()))
checked: bool = Field(default=True)
field_name: str = Field(sa_column=Column(Text))
field_type: str = Field(max_length=128, nullable=True)
field_comment: str = Field(sa_column=Column(Text))
custom_comment: str = Field(sa_column=Column(Text))
# datasource create obj
class CreateDatasource(BaseModel):
id: int = None
name: str = ''
description: str = ''
type: str = ''
configuration: str = ''
create_time: Optional[datetime] = None
create_by: int = 0
status: str = ''
num: str = ''
oid: int = 1
tables: List[CoreTable] = []
# edit local saved table and fields
class TableObj(BaseModel):
table: CoreTable = None
fields: List[CoreField] = []
# datasource config info
class DatasourceConf(BaseModel):
host: str = ''
port: int = 0
username: str = ''
password: str = ''
database: str = ''
driver: str = ''
extraJdbc: str = ''
dbSchema: str = ''
filename: str = ''
sheets: List = ''
mode: str = ''
timeout: int = 30
def to_dict(self):
return {
"host": self.host,
"port": self.port,
"username": self.username,
"password": self.password,
"database": self.database,
"driver": self.driver,
"extraJdbc": self.extraJdbc,
"dbSchema": self.dbSchema,
"filename": self.filename,
"sheets": self.sheets,
"mode": self.mode,
"timeout": self.timeout
}
class TableSchema:
def __init__(self, attr1, attr2):
self.tableName = attr1
self.tableComment = attr2
tableName: str
tableComment: str
class ColumnSchema:
def __init__(self, attr1, attr2, attr3):
self.fieldName = attr1
self.fieldType = attr2
self.fieldComment = attr3
fieldName: str
fieldType: str
fieldComment: str
class TableAndFields:
def __init__(self, schema, table, fields):
self.schema = schema
self.table = table
self.fields = fields
schema: str
table: CoreTable
fields: List[CoreField]