用Python重构《出师表》
在My SQL版本的出师表 - 礼印外盒基础上,将使用SQLAlchemy作为ORM工具,并结合Python代码来实现重构出师表(请勿将以下代码用于生产环境):
from sqlalchemy import (
create_engine, Column, Integer, String, Text, Enum, DateTime,
ForeignKey, CheckConstraint, Float, Boolean, JSON, func, event
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship, Session
from sqlalchemy.sql import text
from datetime import datetime
import json
import math
# 数据库连接配置
DATABASE_URI = "sqlite:///shu_han.db"
engine = create_engine(DATABASE_URI, echo=True)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
# 三维空间点类
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"POINT({self.x} {self.y})"
@classmethod
def from_str(cls, point_str):
# 解析"POINT(x y)"格式的字符串
if point_str.startswith("POINT(") and point_str.endswith(")"):
coords = point_str[6:-1].split()
return cls(float(coords[0]), float(coords[1]))
return None
def to_wkt(self):
return f"POINT({self.x} {self.y})"
# 先帝遗志表
class EmperorLegacy(Base):
__tablename__ = "先帝遗志"
遗训编号 = Column(Integer, primary_key=True, autoincrement=True)
遗训内容 = Column(Text, nullable=False)
生效时间 = Column(DateTime, default=datetime(223, 4, 1))
完成状态 = Column(Enum("待实施", "进行中", "已完成"), nullable=False)
执行版本 = Column(String(20))
__table_args__ = (
CheckConstraint("CHAR_LENGTH(遗训内容) > 10"),
CheckConstraint("(遗训内容 LIKE '%汉室%' OR 遗训内容 LIKE '%中原%') AND 遗训内容 NOT LIKE '%投降%'"),
)
# 文武群臣表
class Minister(Base):
__tablename__ = "文武群臣"
臣工编号 = Column(Integer, primary_key=True, autoincrement=True)
姓名 = Column(String(20), nullable=False)
职级 = Column(Enum("侍中", "尚书", "长史", "参军", "督尉"), nullable=False)
可靠性 = Column(Integer, CheckConstraint("可靠性 BETWEEN 0 AND 100"))
最后考核 = Column(DateTime, default=datetime.now)
特长 = Column(String(100)) # 用逗号分隔的特长列表
__table_args__ = (
Index("贤臣筛选", "可靠性", "特长"),
)
# 军事部署表
class MilitaryDeployment(Base):
__tablename__ = "军事部署"
战区编号 = Column(Integer, primary_key=True, autoincrement=True)
方位 = Column(String(50), nullable=False) # WKT格式存储点
兵力 = Column(Integer, CheckConstraint("兵力 >= 10000"))
军械 = Column(JSON)
指挥官 = Column(Integer, ForeignKey("文武群臣.臣工编号"))
指挥官关系 = relationship("Minister", backref="指挥的战区")
# 紧急军情表
class EmergencyReport(Base):
__tablename__ = "紧急军情"
战区编号 = Column(Integer, primary_key=True)
剩余兵力 = Column(Integer)
请求支援 = Column(Boolean, default=True)
# 治国日志表
class GovernanceLog(Base):
__tablename__ = "治国日志"
时间 = Column(DateTime, primary_key=True, default=datetime.now)
操作 =