LuTong hace 2 meses
padre
commit
26e72f892c
Se han modificado 5 ficheros con 50 adiciones y 22 borrados
  1. 3 2
      README.md
  2. 0 0
      alien_database/__init__.py
  3. 16 0
      alien_database/base.py
  4. 31 0
      alien_database/session.py
  5. 0 20
      common/database.py

+ 3 - 2
README.md

@@ -1,6 +1,6 @@
 # Alien Cloud Python (alien_py_cloud)
 
-U宝后端 V3.0
+本项目是原 Java 项目 `alien_cloud` 的 Python 重构版本。
 
 ## 技术栈
 - **语言**: Python 3.12+
@@ -18,7 +18,8 @@ U宝后端 V3.0
 - `alien_store_platform/`: 核心业务 - 商户平台 (原 alien-store-platform)
 - `alien_second/`: 核心业务 - 二手交易模块 (原 alien-second)
 - `alien_lawyer/`: 核心业务 - 律师服务模块 (原 alien-lawyer)
-- `alien_entity/`: 业务实体定义 (原 alien-entity),使用 Pydantic 模型
+- `alien_database/`: **核心库模块 - 数据库 ORM 模型与持久层基础设施**
+- `alien_entity/`: 业务实体定义 (原 alien-entity),使用 Pydantic 模型 (Schema)
 - `alien_gateway/`: 网关功能 (原 alien-gateway),包含全局配置、鉴权、中间件
 - `alien_util/`: 通用工具类 (原 alien-util)
 - `common/`: 跨模块共享的内部组件(如数据库连接池、基类等)

+ 0 - 0
alien_database/__init__.py


+ 16 - 0
alien_database/base.py

@@ -0,0 +1,16 @@
+from datetime import datetime
+from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
+from sqlalchemy.sql import func
+
+class Base(DeclarativeBase):
+    """
+    所有 SQLAlchemy ORM 模型的抽象基类。
+    包含了审计字段:创建时间、更新时间、逻辑删除标识。
+    """
+    pass
+
+class AuditMixin:
+    """审计字段 Mixin"""
+    created_time: Mapped[datetime] = mapped_column(server_default=func.now(), comment="创建时间")
+    updated_time: Mapped[datetime] = mapped_column(server_default=func.now(), onupdate=func.now(), comment="更新时间")
+    delete_flag: Mapped[int] = mapped_column(default=0, server_default="0", comment="逻辑删除(0未删, 1已删)")

+ 31 - 0
alien_database/session.py

@@ -0,0 +1,31 @@
+from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
+from alien_gateway.config import settings
+
+# 数据库引擎配置 (异步)
+# 注意:aiomysql 用于异步 MySQL 驱动
+DATABASE_URL = settings.SQLALCHEMY_DATABASE_URI.replace("mysql+pymysql", "mysql+aiomysql")
+
+engine = create_async_engine(
+    DATABASE_URL,
+    echo=True,  # 开发环境开启 SQL 日志
+    pool_pre_ping=True,
+    pool_size=10,
+    max_overflow=20
+)
+
+# 创建异步 Session 工厂
+AsyncSessionLocal = async_sessionmaker(
+    bind=engine,
+    class_=AsyncSession,
+    expire_on_commit=False,
+)
+
+async def get_db():
+    """
+    FastAPI 依赖注入项,用于获取数据库 Session。
+    """
+    async with AsyncSessionLocal() as session:
+        try:
+            yield session
+        finally:
+            await session.close()

+ 0 - 20
common/database.py

@@ -1,20 +0,0 @@
-from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
-from alien_gateway.config import settings
-
-# 异步数据库引擎
-engine = create_async_engine(
-    settings.SQLALCHEMY_DATABASE_URI.replace("mysql+pymysql", "mysql+aiomysql"),
-    echo=True,
-    pool_pre_ping=True,
-)
-
-AsyncSessionLocal = async_sessionmaker(
-    bind=engine,
-    class_=AsyncSession,
-    expire_on_commit=False,
-)
-
-async def get_db():
-    """获取数据库 Session 的依赖项"""
-    async with AsyncSessionLocal() as session:
-        yield session