init: EasyScreen 电子菜单系统
- server: FastAPI 后端(多屏管理、素材上传、节目编排、客户端注册/配置/心跳/崩溃上报、管理台托管) - android: Java 客户端(minSdk 23,全屏图片/视频轮播、远程配置、开机自启、崩溃上报) - web: React + Vite + antd 管理台(屏幕/素材/节目管理) - 屏幕设备 ID 关联机制、gunicorn 生产部署脚本
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
"""数据库连接与会话管理(SQLAlchemy 2.0)。"""
|
||||
from sqlalchemy import create_engine, event
|
||||
from sqlalchemy.orm import DeclarativeBase, sessionmaker
|
||||
|
||||
from .config import get_database_url
|
||||
|
||||
_database_url = get_database_url()
|
||||
|
||||
_engine = create_engine(
|
||||
_database_url,
|
||||
pool_pre_ping=True,
|
||||
connect_args={"check_same_thread": False} if _database_url.startswith("sqlite") else {},
|
||||
echo=False,
|
||||
)
|
||||
|
||||
|
||||
@event.listens_for(_engine, "connect")
|
||||
def _enable_sqlite_fk(dbapi_connection, connection_record):
|
||||
"""SQLite 默认关闭外键约束,需显式开启以支持 CASCADE。"""
|
||||
if _database_url.startswith("sqlite"):
|
||||
cursor = dbapi_connection.cursor()
|
||||
cursor.execute("PRAGMA foreign_keys=ON")
|
||||
cursor.close()
|
||||
|
||||
SessionLocal = sessionmaker(bind=_engine, autocommit=False, autoflush=False)
|
||||
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
def get_db():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
yield db
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user