sqlalchemy-orm学生签到 成绩记录查询系统
#!/usr/bin/env python
# Author:zhangmingda
''''''
from sqlalchemy import create_engine,ForeignKey,DATE,Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import relationship,sessionmaker
engine = create_engine("mysql+pymysql://zhangmingda:Wyf@1314@120.92.133.227/stu_record_project?charset=utf8",encoding='utf8',echo=False)
'''说明:engine 如果想写入中文,在库名后面加入?charset=utf8 encoding=utf-8 不起作用'''
'''生成基类'''
Base = declarative_base()
#'''此表只存老师id和class id的对应关系'''
teacher_m2m_classes = Table(
'teacher_m2m_classes', Base.metadata,
Column('teacher_id', Integer, ForeignKey('teachers.id')),
Column('class_id', Integer, ForeignKey('classes.id'))
)
#'''此表表示课节和班级的对应关系:一节课可能多个班级同时上'''
lessons_m2m_classes = Table(
'lessons_m2m_classes',Base.metadata,
Column('lesson_id',Integer,ForeignKey('lessons.id')),
Column('class_id',Integer,ForeignKey('classes.id'))
)
#'''此表表示学生和班级的对应关系:一个班级多个学生,一个学生也可能报多个班'''
students_m2m_classes = Table(
'students_m2m_classes', Base.metadata,
Column('student_id', Integer, ForeignKey('students.id')),
Column('class_id', Integer, ForeignKey('classes.id'))
) class Teacher(Base):
'''老师表'''
__tablename__ = 'teachers'
__table_args__ = {'mysql_charset': 'utf8'}
id = Column(Integer,primary_key=True)
name = Column(String(64),nullable=False,unique=True)
classes = relationship('Class',secondary=teacher_m2m_classes,backref='teachers')
def __repr__(self):
return "讲师:%s"% self.name class Student(Base):
'''学生表'''
__tablename__ = 'students'
__table_args__ = {'mysql_charset': 'utf8'}
id = Column(Integer,primary_key=True)
name = Column(String(64),nullable=False)
QQ = Column(String(64),nullable=False,unique=True)
def __repr__(self):
return "学生:%s"% self.name class Class(Base):
'''班级表'''
__tablename__ = 'classes'
__table_args__ = {'mysql_charset': 'utf8'}
id = Column(Integer, primary_key=True)
name = Column(String(64), nullable=False, unique=True)
students = relationship('Student',secondary=students_m2m_classes,backref='classes')
def __repr__(self):
return self.name class Lesson(Base):
'''课节表'''
__tablename__ = 'lessons'
__table_args__ = {'mysql_charset': 'utf8'}
id = Column(Integer,primary_key=True)
name = Column(String(64), nullable=False, unique=True)
lesson_class = relationship('Class',secondary=lessons_m2m_classes,backref='lessons')
def __repr__(self):
return self.name #'课节;%s'%
class Stu_record(Base):
'''上课记录表'''
__tablename__ = 'stu_record'
__table_args__ = {'mysql_charset': 'utf8'}
id = Column(Integer,primary_key=True)
lesson_id = Column(Integer,ForeignKey('lessons.id'))
stu_id = Column(Integer,ForeignKey('students.id'))
status = Column(String(64),nullable=True)
homework = Column(String(64),nullable=True)
score = Column(Integer,nullable=True)
lessons_name = relationship('Lesson',backref='lessons_record')
student = relationship('Student',backref='lessons_record')
def __repr__(self):
return '%s 课节 学员:%s 状态:%s 成绩 :%s '%(self.lessons_name,self.student,self.status,self.score) if __name__ == '__main__':
Base.metadata.create_all(engine)
table_class
#!/usr/bin/env python
# Author:zhangmingda
import teacher_active,student_active,tables_class
from sqlalchemy.orm import sessionmaker SessionClass = sessionmaker(bind=tables_class.engine)
session = SessionClass() # teacher = teacher_active.Teacher_view(session)
# teacher.handle() student = student_active.Student_view(session)
student.handle()
main
#!/usr/bin/env python
# Author:zhangmingda
import tables_class class Teacher_view(object):
def __init__(self,session):
self.session = session
self.login_status = False
self.teacher_obj = None
# self
def auth(self):
'''简易登录认证'''
while True:
teacher_name = input('\033[34;1m请输入讲师名字:\033[0m').strip()
teacher_obj = self.session.query(tables_class.Teacher).filter_by(name=teacher_name).first()
if teacher_obj:
self.teacher_obj = teacher_obj
self.login_status = True
break
else:
continue
def handle(self):
while not self.login_status:
self.auth()
else:
while self.login_status:
print('\033[32;1m欢迎进入讲师操作界面,请输入要操作的代号:\033[0m')
menu = {
1:"创建班级",
2:"创建课节",
3:"向班级添加学员",
4:"修改学员上课记录",
5:"修改学员成绩",
6:"退出系统",
}
menu_dict = {
"1": self.create_class,
"2": self.create_lesson,
"3": self.add_student,
"4": self.modify_record,
"5": self.modify_score,
"6": 'exit'
}
for i in menu:
print(i,menu[i])
chose = input('请选择>>>').strip()
if chose in menu_dict and chose != "6" :
menu_dict[chose]()
elif chose == '6':break
else:
print('\033[31;1m您输入的代号不存在,请重新输入。\033[0m') def create_class(self):
class_name = input('\033[32;0m要创建班级名称:\033[0m').strip()
class_exist = self.session.query(tables_class.Class).filter_by(name=class_name).first()
if class_exist:
print('\033[31;1m班级名称已存在:%s\033[0m'% class_exist)
else:
class_obj = tables_class.Class(name=class_name)
self.teacher_obj.classes.append(class_obj)
self.session.add_all([class_obj])
self.session.commit()
print('\033[32;1m班级:%s创建成功\033[0m'%class_obj)
def create_lesson(self):
classes = self.teacher_obj.classes
if not classes:
print('\033[31;1m您不教任何一个班级,无法创建课程\033[0m')
else :
print('\033[32;1m您所教班级有\033[0m')
for i in classes:
print(i)
while True:
input_class = input('\033[32;1m 请输入要创建课程的班级名称>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(name=input_class).first()
if not class_obj:
print('\033[31;1m 输入的班级名称不存在,请重新输入。\033[0m')
else:
class_lessons = class_obj.lessons
print('\033[33;1m班级:%s当前已关联课程:%s'%(class_obj,class_lessons))
lesson_name = input('\033[32;1m 输入要创建的课程名称>>> \033[0m')
lesson_obj_exist = self.session.query(tables_class.Lesson).filter_by(name=lesson_name).first()
#课程已存在,并且已经关联该班级
if lesson_obj_exist in list(class_lessons):
print('\033[31;1m %s 下课程:%s已存在,请重新添加\033[0m'%(class_obj,lesson_obj_exist))
#'''课程已存在,但未关联该班级'''
elif lesson_obj_exist and lesson_obj_exist not in list(class_lessons): #课程表中有,但未关联班级
'''list()将sqlalchemy的对象list转为普通list,用来做in的判断'''
print('\033[31;1m 课程名:%s库中已存在\033[0m,\033[32;1m直接加入到课程%s\033[0m'%(lesson_name,class_obj))
class_obj.lessons.append(lesson_obj_exist) #将已有课程关联班级
self.session.commit()
# print('类型:',type(lesson_obj_exist),'测试',type(list(class_lessons)))
break
#课程不存在
else:
lesson_obj = tables_class.Lesson(name=lesson_name) #创建课程对象
lesson_obj.lesson_class.append(class_obj) #将课程同班级关联
self.session.add_all([lesson_obj]) #加入session
self.session.commit() #提交保存到数据库
break def add_student(self):
classes = self.teacher_obj.classes
if not classes:
print('\033[31;1m您不教任何一个班级,无法添加学生\033[0m')
else :
print('\033[32;1m您所教班级有\033[0m')
for i in classes:
print(i)
while True:
input_class = input('\033[32;1m 请输入要添加学员的班级名称>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(name=input_class).first()
if not class_obj:
print('\033[31;1m 输入的班级名称不存在,请重新输入。\033[0m')
else:
print('%s 班 已有学员 %s'%(class_obj,class_obj.students))
input_stu = input('\033[32;1m 请输入要添加的学员QQ号码:\033[0m').strip()
stu_obj = self.session.query(tables_class.Student).filter_by(QQ=input_stu).first()
if stu_obj and stu_obj in list(class_obj.students):
print('\033[31;1m %s 已存在 %s 班'%(stu_obj,class_obj))
elif not stu_obj:
print("\033[31;1m %s 不存在\033[0m"% stu_obj)
else:
class_obj.students.append(stu_obj)
self.session.commit()
print("\033[32;1m %s 添加到 %s 成功!\033[0m"%(stu_obj,class_obj))
break
pass
def modify_record(self):
classes = self.teacher_obj.classes
if not classes:
print('\033[31;1m您不教任何一个班级,无法添加上课记录\033[0m')
else:
print('\033[32;1m您所教班级有\033[0m')
for i in classes:
print(i.id,i)
while True:
input_class_id = input('\033[32;1m 请选择班级名称代号>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(id=input_class_id).first()
if not class_obj:
print('\033[31;1m 输入的班级代号不存在,请重新输入。\033[0m')
# continue
else:
while True:
print('%s 班 已有课程 %s' % (class_obj, class_obj.lessons))
chose_lesson = input('\033[32;1m 请选择课程\033[0m')
lesson_obj = self.session.query(tables_class.Lesson).filter_by(name=chose_lesson).first()
if lesson_obj in list(class_obj.lessons):
print('\033[32;1m %s 学生有:%s\033[0m'%(class_obj,class_obj.students))
for stu in list(class_obj.students):
status = input('%s %s %s QQ:%s 打卡状态》:'%(class_obj,lesson_obj,stu,stu.QQ)).strip()
if not status:
print('跳过 :%s'% stu)
continue
else:
record_obj = self.session.query(tables_class.Stu_record).filter_by(lesson_id=lesson_obj.id,
stu_id=stu.id).first()
if record_obj:
record_obj.status = status
self.session.commit()
print('\033[33;1m 已有该学生记录,修改签到状态提交成功!\033[0m')
# break
else:
record_obj = tables_class.Stu_record(lesson_id=lesson_obj.id, stu_id=stu.id,
status=status)
self.session.add_all([record_obj]) # 加入session
self.session.commit() # 提交保存到数据库
print('\033[33;1m 新建签到状态提交成功!!\033[0m')
print('\033[32;1m 所有学生签到状态修改完成\033[0m');break
else:
print('\033[31; 您选择的课程不存在该班级中\033[0m') break pass
def modify_score(self):
classes = self.teacher_obj.classes
if not classes:
print('\033[31;1m您不教任何一个班级,无法添加上课记录\033[0m')
else:
print('\033[32;1m您所教班级有\033[0m')
for i in classes:
print(i.id, i)
while True:
input_class_id = input('\033[32;1m 请选择班级名称代号,修改成绩>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(id=input_class_id).first()
if not class_obj:
print('\033[31;1m 输入的班级代号不存在,请重新输入。\033[0m')
# continue
else:
while True:
print('%s 班 已有课程 %s' % (class_obj, class_obj.lessons))
chose_lesson = input('\033[32;1m 请选择课程\033[0m')
lesson_obj = self.session.query(tables_class.Lesson).filter_by(name=chose_lesson).first()
if lesson_obj in list(class_obj.lessons):
print('\033[32;1m %s 学生有:%s\033[0m' % (class_obj, class_obj.students))
for stu in list(class_obj.students):
score = input('%s %s %s QQ:%s 输入成绩:' % (class_obj, lesson_obj, stu, stu.QQ)).strip()
if not score:
print('跳过 :%s' % stu)
continue
else:
record_obj = self.session.query(tables_class.Stu_record).filter_by(
lesson_id=lesson_obj.id,
stu_id=stu.id).first()
if record_obj:
record_obj.score = score
self.session.commit()
print('\033[33;1m 已有该学生记录,修改学生成绩提交成功!\033[0m')
# break
else:
record_obj = tables_class.Stu_record(lesson_id=lesson_obj.id, stu_id=stu.id,
score=score)
self.session.add_all([record_obj]) # 加入session
self.session.commit() # 提交保存到数据库
print('\033[33;1m 新建学生成绩提交成功!!\033[0m')
print('\033[32;1m 所有学生成绩提交完成\033[0m');break
else:
print('\033[31; 您选择的课程不存在该班级中\033[0m') break
pass
teacher_active
#!/usr/bin/env python
# Author:zhangmingda
import tables_class class Student_view(object):
def __init__(self,session):
self.session = session
self.login_status = False
self.student_obj = None
def sign_up(self):
name = input('\033[32;0m创建您的用户名:\033[0m ').strip()
QQ = input('\033[32;0m输入您的QQ号码:\033[0m ')
stu_obj = tables_class.Student(name=name,QQ=QQ)
stu_exist = self.session.query(tables_class.Student).filter_by(QQ=QQ).first()
if stu_exist:
print('\033[31;1m%s 已存在 QQ:%s\033[0m'%(stu_exist,stu_exist.QQ))
else:
print('库里没这QQ号的个人,开始创建')
self.session.add(stu_obj)
self.session.commit()
print('\033[32;1m %s 创建成功\033[0m'% stu_obj) def auth(func):
'''简易登录认证装饰器'''
def wapper(*args,**kwargs):
self = args[0] #将实例自己本身获取到
while not self.login_status:
student_name = input('\033[34;1m请输入学生名字:\033[0m').strip()
QQ = input('\033[34;1m请输入QQ号码:\033[0m').strip()
student_obj = self.session.query(tables_class.Student).filter_by(name=student_name,QQ=QQ).first()
if student_obj:
self.student_obj = student_obj
self.login_status = True
func(self)
break
else:
print('\033[31;1m 用户不存在\033[0m')
else:
func(self)
return wapper @auth
def hand_in_homework(self): classes = self.student_obj.classes
if not classes:
print('\033[31;1m您未加入任何班级,无法交作业\033[0m')
else :
print('\033[32;1m您已报培训班\033[0m')
for i in classes:
print(i)
while True:
input_class = input('\033[32;1m 请输入要交作业的班级名称>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(name=input_class).first()
if not class_obj:
print('\033[31;1m 输入的班级名称不存在,请重新输入。\033[0m')
else:
class_lessons = class_obj.lessons
print('\033[33;1m班级:%s当前已关联课程:%s'%(class_obj,class_lessons))
lesson_name = input('\033[32;1m 输入要交作业的课程名称>>> \033[0m')
lesson_obj_exist = self.session.query(tables_class.Lesson).filter_by(name=lesson_name).first()
#课程已存在,并且已经关联该班级
if lesson_obj_exist in list(class_lessons):
lesson_id = lesson_obj_exist.id
stu_id = self.student_obj.id
homework = 'Already Submit'
record_obj = self.session.query(tables_class.Stu_record).filter_by(lesson_id=lesson_id,stu_id=stu_id).first()
if record_obj:
record_obj.homework = homework
self.session.commit()
print('\033[33;1m 作业提交成功!\033[0m')
break
else:
record_obj = tables_class.Stu_record(lesson_id=lesson_id,stu_id=stu_id,homework=homework)
self.session.add_all([record_obj]) #加入session
self.session.commit() #提交保存到数据库
print('\033[33;1m 作业提交成功!\033[0m')
break @auth
def show_score(self):
classes = self.student_obj.classes
if not classes:
print('\033[31;1m您未加入任何班级,无法查看成绩\033[0m')
else:
print('\033[32;1m您已报培训班\033[0m')
for i in classes:
print(i)
while True:
input_class = input('\033[32;1m 请输入要查看成绩的班级名称>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(name=input_class).first()
if not class_obj:
print('\033[31;1m 输入的班级名称不存在,请重新输入。\033[0m')
else:
class_lessons = class_obj.lessons
print('\033[33;1m班级:%s当前已关联课程:%s' % (class_obj, class_lessons))
lesson_name = input('\033[32;1m 输入要查看成绩的课程名称,查看全部输入:all>>> \033[0m')
lesson_obj_exist = self.session.query(tables_class.Lesson).filter_by(name=lesson_name).first()
# 课程已存在,并且已经关联该班级
if lesson_obj_exist in list(class_lessons):
lesson_id = lesson_obj_exist.id
stu_id = self.student_obj.id
stu_record_obj = self.session.query(tables_class.Stu_record).filter_by(lesson_id=lesson_id,stu_id=stu_id).first()
# print('\033[32;1m%s %s 成绩:%s\033[0m'% (self.student_obj,lesson_obj_exist,stu_record_obj.score))
print(stu_record_obj)
break
elif lesson_name == 'all':
print('\033[32;1m 您 %s 全部课程成绩如下 \033[0m'% class_obj)
stu_record_obj_all = self.session.query(tables_class.Stu_record).filter_by(stu_id=self.student_obj.id).all()
for stu_record_obj in stu_record_obj_all:
if stu_record_obj.lessons_name in list(class_lessons):
print(stu_record_obj)
break
else:
print('\033[31 您输入的课程不存在\033[0m')
@auth
def show_ranking(self):
classes = self.student_obj.classes
if not classes:
print('\033[31;1m您未加入任何班级,无法查看成绩排名\033[0m')
else:
print('\033[32;1m您已报培训班\033[0m')
for i in classes:
print(i)
while True:
input_class = input('\033[32;1m 请输入要查看成绩的班级名称>>>\033[0m').strip()
class_obj = self.session.query(tables_class.Class).filter_by(name=input_class).first()
if not class_obj:
print('\033[31;1m 输入的班级名称不存在,请重新输入。\033[0m')
else:
class_lessons = class_obj.lessons
print('\033[33;1m班级:%s当前已关联课程:%s' % (class_obj, class_lessons))
lesson_name = input('\033[32;1m 输入要查看成绩的课程名称>>> \033[0m')
lesson_obj_exist = self.session.query(tables_class.Lesson).filter_by(name=lesson_name).first()
if lesson_obj_exist in list(class_lessons):
students_score = self.session.query(tables_class.Stu_record).filter_by(lesson_id=lesson_obj_exist.id).order_by(tables_class.Stu_record.score.desc()).all()
students_score_list = list(students_score)
for ranking,score_obj in enumerate(students_score_list,1):
if score_obj.stu_id == self.student_obj.id:
print('\033[32;1m 您在 %s %s 中排第%s名\033[0m'%(class_obj,lesson_obj_exist,ranking))
break
else:
print('\033[31 您输入的课程不存在\033[0m') def handle(self):
while True:
print('\033[32;1m欢迎进入学生操作界面,请输入要操作的代号:\033[0m')
menu = {
1:"注册",
2:"交作业",
3:"查看成绩",
4:"查看排名",
5:"退出系统"
}
menu_dict = {
"1": self.sign_up,
"2": self.hand_in_homework,
"3": self.show_score,
"4": self.show_ranking,
"5": 'exit'
}
for i in menu:
print(i,menu[i])
chose = input('请选择>>>').strip()
if chose in menu_dict and chose != "5" :
menu_dict[chose]()
elif chose == '5':break
else:
print('\033[31;1m您输入的代号不存在,请重新输入。\033[0m')
pass
student_active
sqlalchemy-orm学生签到 成绩记录查询系统的更多相关文章
- SQLAlchemy ORM之建表与查询
作了最基本的操作,找找感觉.. #coding=utf-8 from datetime import datetime from sqlalchemy import (MetaData, Table, ...
- 暑假闲着没事第一弹:基于Django的长江大学教务处成绩查询系统
本篇文章涉及到的知识点有:Python爬虫,MySQL数据库,html/css/js基础,selenium和phantomjs基础,MVC设计模式,ORM(对象关系映射)框架,django框架(Pyt ...
- C语言 · 成绩查询系统
抱歉,昨天忘了往博客上更新,今天补上. 成绩查询系统 分值: 21 数学老师小y 想写一个成绩查询系统,包含如下指令: insert [name] [score],向系统中插入一条信息,表示名字为na ...
- C语言程序设计#成绩查询系统
学生成绩管理系统 [注释]:请点赞,好人一生平[yi]安[wo]. #codeblocks程序下编写 #include<stdio.h>#include<stdlib.h>// ...
- JavaScript编写学生查询系统
const readline = require('readline-sync')//引用readline-sync //用户名,密码 let user = [{ username: 'yang', ...
- python 之路,Day11 (下)- sqlalchemy ORM
python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM ...
- sqlalchemy ORM模块使用介绍
前几天用到了flask框架,所以顺带介绍了flask-sqlalchemy扩展模块,去瞄一眼,由于有好多非web的python程序也用到了数据库,所以今天分享一下sqlalchemy的模块的使用方法. ...
- SQLAlchemy ORM教程之二:Query
from:https://www.jianshu.com/p/8d085e2f2657 这是继SQLAlchemy ORM教程之一:Create后的第二篇教程.在上一篇中我们主要是解决了如何配置ORM ...
- Python SQLAlchemy ORM示例
SQLAlchemy的是Python的SQL工具包和对象关系映射,给应用程序开发者提供SQL的强大功能和灵活性. 安装 pip install mysql-python pip install sql ...
随机推荐
- layui的下拉-多选
网址: https://hnzzmsf.github.io/example/example_v4.html 1.下载代码: 2.整合layui 3.代码整合: <link rel="s ...
- ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer
前言 本文解读的论文是ICCV2021中的最佳论文,在短短几个月内,google scholar上有388引用次数,github上有6.1k star. 本文来自公众号CV技术指南的论文分享系 ...
- [CCC2019] Tourism题解
我们先考虑一下拿部分分: subtask1 考虑因为 \(n < 2k\) ,那么我们的划分一定是从中间某个地方裁开,且满足 \(k\) 的条件的,我们发现当划分点在 \([n\ mod\ k, ...
- miRNA分析--比对(二)
miRNA分析--数据过滤(一) 在比对之前为了减少比对时间,将每一个样本中的reads进行合并,得到fasta格式,其命名规则如下: 样本_r数子_x数字 r 中的数字表示reads序号: x 中的 ...
- Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议
Mysql查询优化汇总 order by优化例子,group by优化例子,limit优化例子,优化建议 索引 索引是一种存储引擎快速查询记录的一种数据结构. 注意 MYSQL一次查询只能使用一个索引 ...
- perl中tr的用法(转载)
转载:http://blog.sina.com.cn/s/blog_4a0824490101hncz.html (1)/c表示把匹配不上的字符进行替换. $temp="AAAABCDEF&q ...
- php header下载文件 无法查看原因
php header下载文件 无法查看原因 php header下载文件 下方函数可以下载单个文件 function download($file_url){ if(!isset($file_url) ...
- 『与善仁』Appium基础 — 17、元素定位工具(一)
目录 1.uiautomatorviewer介绍 2.uiautomatorviewer工具打开方式 3.uiautomatorviewer布局介绍 4.uiautomatorviewer工具的使用 ...
- 学习 DDD - 通用语言的模式
大家好,我是霸戈,这周学习了一些关于领域驱动设计的知识 ,对比较深刻的地方做了不少笔记,分享给大家. 在日常需求讨论的时候,经常会碰到一个需求会议开了一个多小时还没有达成共识.作为业务方(领域专家)明 ...
- C语言中的main函数的参数解析
main()函数既可以是无参函数,也可以是有参的函数.对于有参的形式来说,就需要向其传递参数.但是其它任何函数均不能调用main()函数.当然也同样无法向main()函数传递,只能由程序之外传递而来. ...