已合并
支持数据库分实例隔离数据 #472
支持数据库分实例隔离数据 #472
已合并
陈卉创建于 5 天前
9 个文件变更+89-20
Mapplications/manager/manager_server/src/manager_server/infrastructure/db.py+6-5文件内容审核中,请稍后刷新重试
Mfoundation/openjiuwen_runtime/foundation/db/__init__.py+5-0文件内容审核中,请稍后刷新重试
@@ -5,7 +5,7 @@ from datetime import datetime
5import logging5import logging
6from typing import Optional, Any6from typing import Optional, Any
7import json7import json
8-from sqlalchemy import Column, Integer, String, DateTime, JSON, Boolean, Float, text, inspect, Index8+from sqlalchemy import Column, Integer, String, DateTime, JSON, Boolean, Float, Text, text, inspect, Index
9from sqlalchemy.engine import make_url9from sqlalchemy.engine import make_url
10from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker10from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker
11from sqlalchemy.orm import DeclarativeBase11from sqlalchemy.orm import DeclarativeBase
@@ -106,12 +106,21 @@ class SQLAlchemyHandler(DBHandler):
106 106 
107 def _get_sqlalchemy_type(self, data_type: str, length: Optional[int] = None):107 def _get_sqlalchemy_type(self, data_type: str, length: Optional[int] = None):
108 """将数据类型字符串转换为 SQLAlchemy 类型"""108 """将数据类型字符串转换为 SQLAlchemy 类型"""
109+ key = data_type.lower()
110+ # 大文本族:mysql 用 MEDIUMTEXT/LONGTEXT 变体(分别 16MB / 4GB),
111+ # 其余方言(pg/sqlite/...)用 Text(pg TEXT 无界、sqlite TEXT 无界)。
112+ if key in ("mediumtext", "longtext"):
113+ if self._get_dialect_name() == "mysql":
114+ from sqlalchemy.dialects.mysql import MEDIUMTEXT, LONGTEXT
115+ 
116+ return LONGTEXT if key == "longtext" else MEDIUMTEXT
117+ return Text
109 type_map = {118 type_map = {
110 "integer": Integer,119 "integer": Integer,
111 "int": Integer,120 "int": Integer,
112 "string": String,121 "string": String,
113 "str": String,122 "str": String,
114- "text": String,123+ "text": Text,
115 "datetime": DateTime,124 "datetime": DateTime,
116 "json": JSON,125 "json": JSON,
117 "boolean": Boolean,126 "boolean": Boolean,
@@ -122,7 +131,7 @@ class SQLAlchemyHandler(DBHandler):
122 "number": Float,131 "number": Float,
123 "real": Float,132 "real": Float,
124 }133 }
125- sa_type = type_map.get(data_type.lower(), String)134+ sa_type = type_map.get(key, String)
126 if sa_type == String and length:135 if sa_type == String and length:
127 return String(length)136 return String(length)
128 return sa_type137 return sa_type
@@ -142,10 +151,16 @@ class SQLAlchemyHandler(DBHandler):
142 data_type = col_def.data_type.lower()151 data_type = col_def.data_type.lower()
143 if data_type in {"integer", "int"}:152 if data_type in {"integer", "int"}:
144 return "INTEGER"153 return "INTEGER"
145- if data_type in {"string", "str", "text"}:154+ if data_type in {"string", "str"}:
146 if col_def.length:155 if col_def.length:
147 return f"VARCHAR({col_def.length})"156 return f"VARCHAR({col_def.length})"
148 return "VARCHAR"157 return "VARCHAR"
158+ if data_type in {"mediumtext", "longtext"}:
159+ if self._get_dialect_name() == "mysql":
160+ return "LONGTEXT" if data_type == "longtext" else "MEDIUMTEXT"
161+ return "TEXT"
162+ if data_type == "text":
163+ return "TEXT"
149 if data_type == "datetime":164 if data_type == "datetime":
150 return "DATETIME"165 return "DATETIME"
151 if data_type == "json":166 if data_type == "json":
Afoundation/openjiuwen_runtime/foundation/db/utils.py+33-0文件内容审核中,请稍后刷新重试
Mservice/openjiuwen_runtime/service/bootstrap.py+10-3文件内容审核中,请稍后刷新重试
Mservice/openjiuwen_runtime/service/config.py+8-3文件内容审核中,请稍后刷新重试