新增databases.py把所有建表基类统一成一个,才可以链接外键。

This commit is contained in:
Orangeeee
2026-09-22 15:14:32 +08:00
parent f6e4cdedfc
commit 8f39d5456a
9 changed files with 72 additions and 18 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# .env(放项目根目录,每个人自己建,不提交 Git) # .env(放项目根目录,每个人自己建,不提交 Git)
# 用来修改数据库账户密码 # 用来修改数据库账户密码
DB_USER=root DB_USER=root
DB_PASSWORD= DB_PASSWORD=420821
DB_HOST=localhost DB_HOST=localhost
DB_PORT=3306 DB_PORT=3306
DB_NAME=student_manage_system DB_NAME=student_manage_system
+2 -1
View File
@@ -1,3 +1,4 @@
from databases import engine_all,Base_all,Session
from Teachers.database import * from Teachers.database import *
from datetime import datetime from datetime import datetime
from sqlalchemy import * from sqlalchemy import *
@@ -7,7 +8,7 @@ class Gender(str,enum.Enum):
m = '男' m = '男'
f = '女' f = '女'
class Tea(Base): class Tea(Base_all):
__tablename__ = 'teachers' __tablename__ = 'teachers'
id = Column(Integer id = Column(Integer
, primary_key=True , primary_key=True
@@ -1,9 +1,10 @@
from databases import engine_all,Base_all,Session
from sqlalchemy import Column, Integer, String, Date, ForeignKey from sqlalchemy import Column, Integer, String, Date, ForeignKey
from sqlalchemy.dialects.mysql import DATETIME from sqlalchemy.dialects.mysql import DATETIME
from datetime import datetime from datetime import datetime
from class_management.database import Base from class_management.database import Base
class ClassInfo(Base): class ClassInfo(Base_all):
__tablename__ = 'classes' __tablename__ = 'classes'
id = Column(Integer id = Column(Integer
+35
View File
@@ -0,0 +1,35 @@
# databases链接数据库
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker,declarative_base
# 导入.env参数
import os
from dotenv import load_dotenv
load_dotenv( )
DB_USER = os.getenv("DB_USER", "root")
DB_PASSWORD = os.getenv("DB_PASSWORD", "")
DB_HOST = os.getenv("DB_HOST", "localhost")
DB_PORT = os.getenv("DB_PORT", "3306")
DB_NAME = os.getenv("DB_NAME", "student_manage_system")
db_url = f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}?charset=utf8mb4"
engine_all = create_engine(db_url)
Base_all = declarative_base()
Session = sessionmaker(bind=engine_all
,autoflush=False
,autocommit=False)
def get_db():
db = Session()
try:
yield db
finally:
db.close()
+5
View File
@@ -20,3 +20,8 @@ def main():
if __name__ == "__main__": if __name__ == "__main__":
import uvicorn import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=59000) uvicorn.run("main:app", host="0.0.0.0", port=59000)
"""
IPv4 地址 . . . . . . . . . . . . : 192.168.6.40
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : 192.168.6.1
"""
+2 -1
View File
@@ -1,7 +1,8 @@
from databases import engine_all,Base_all,Session
from scores.database import Base from scores.database import Base
from datetime import datetime from datetime import datetime
from sqlalchemy import DateTime,Column,Integer,String,Float from sqlalchemy import DateTime,Column,Integer,String,Float
class Score(Base): class Score(Base_all):
__tablename__='scores' __tablename__='scores'
id = Column(Integer id = Column(Integer
,primary_key = True ,primary_key = True
+4 -3
View File
@@ -1,3 +1,4 @@
from databases import engine_all,Base_all,Session
from sqlalchemy import ForeignKey from sqlalchemy import ForeignKey
from stu_jiuye.database import DATETIME,Base,Column,Integer,String,DATE from stu_jiuye.database import DATETIME,Base,Column,Integer,String,DATE
@@ -30,7 +31,7 @@ from datetime import datetime
# ) # )
class Employments(Base): #学生就业信息基类 class Employments(Base_all): #学生就业信息基类
__tablename__ = 'Employments' #表名 __tablename__ = 'Employments' #表名
id = Column(Integer #主键,自增主键 id = Column(Integer #主键,自增主键
, primary_key=True , primary_key=True
@@ -68,7 +69,7 @@ class Employments(Base): #学生就
) )
is_deleted = Column(Integer, default=0) #是否为删除信息,默认为0 is_deleted = Column(Integer, default=0) #是否为删除信息,默认为0
class Company(Base): #公司信息基类 class Company(Base_all): #公司信息基类
__tablename__ = 'Company' #表名 __tablename__ = 'Company' #表名
id = Column(Integer id = Column(Integer
, primary_key=True , primary_key=True
@@ -90,7 +91,7 @@ class Company(Base): #公司信
) )
is_deleted = Column(Integer, default=0) is_deleted = Column(Integer, default=0)
class Address(Base): class Address(Base_all):
__tablename__ = 'Address' __tablename__ = 'Address'
id = Column(Integer #地址id,自增主键 id = Column(Integer #地址id,自增主键
, primary_key=True , primary_key=True
+12 -6
View File
@@ -5,17 +5,23 @@ from students.model import students_model
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
# 合并接口 # 合并接口
Students_API = APIRouter()
Students_API.include_router(s_api)
# 自测接口
@asynccontextmanager @asynccontextmanager
async def lifespan(app: FastAPI): async def S_Router(Students_API: APIRouter):
Base.metadata.create_all(engine1) Base.metadata.create_all(engine1)
yield yield
engine1.dispose() engine1.dispose()
app = FastAPI(title="学生管理系统",lifespan=lifespan) # 这里必须把上面写的加上 Students_API = APIRouter(lifespan=S_Router)
Students_API.include_router(s_api)
# 自测接口
@asynccontextmanager
async def S_Fastapi(app: FastAPI):
Base.metadata.create_all(engine1)
yield
engine1.dispose()
app = FastAPI(title="学生管理系统",lifespan=S_Fastapi) # 这里必须把上面写的加上
app.include_router(s_api,tags=["students"]) app.include_router(s_api,tags=["students"])
+7 -3
View File
@@ -1,13 +1,15 @@
# students_model处理数据库模型 # students_model处理数据库模型
import datetime import datetime
from students.databases import * from databases import engine_all,Base_all,Session
from sqlalchemy import *
# from students.databases import *
from datetime import datetime from datetime import datetime
from sqlalchemy.dialects.mysql import DATETIME from sqlalchemy.dialects.mysql import DATETIME
from students.schema.students_request import SexEnum , EducationEnum from students.schema.students_request import SexEnum , EducationEnum
from sqlalchemy import Enum from sqlalchemy import Enum,ForeignKey,Integer,String
class Students(Base): class Students(Base_all):
__tablename__ = 'students' __tablename__ = 'students'
id = Column(Integer id = Column(Integer
, primary_key=True , primary_key=True
@@ -53,10 +55,12 @@ class Students(Base):
# 外键字段 # 外键字段
class_id = Column(Integer class_id = Column(Integer
, ForeignKey("classes.id")
, comment='学生班级' , comment='学生班级'
, nullable=False ) , nullable=False )
advisor_id = Column(Integer advisor_id = Column(Integer
, ForeignKey("teachers.id")
, comment='顾问ID') , comment='顾问ID')
# 额外字段 # 额外字段