那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__Author__ = "Zhang Xuyao" from sqlalchemy import create_engine # engine = create_engine("mysql+pymysql://root:123123@localhost/attendance?charset=utf8", echo=True)
engine = create_engine("mysql+pymysql://root:123123@localhost/attendance?charset=utf8")
engine
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__Author__ = "Zhang Xuyao" from sqlalchemy.ext.declarative import declarative_base
from settings import db_settings
from sqlalchemy import Table, Column, Integer, String, Enum, DATE, ForeignKey, PrimaryKeyConstraint
from sqlalchemy.orm import relationship Base = declarative_base() teacherBatch_t = Table('tbt', Base.metadata,
Column('batch_name', String(64), ForeignKey('batch.name')),
Column('teacher_id', String(64), ForeignKey('teacher.id'))
) studentBatch_t = Table('sbt', Base.metadata,
Column('batch_name', String(64), ForeignKey('batch.name')),
Column('student_qq', String(64), ForeignKey('student.qq'))
) class Teacher(Base):
__tablename__ = 'teacher'
id = Column(String(64), primary_key=True)
name = Column(String(64), nullable=False)
password = Column(String(64), nullable=False, default='321cba') # tstudents = relationship('Student', secondary=task_t, backref='teachers')
tbatchs = relationship('Batch', secondary=teacherBatch_t, backref='teachers') def __repr__(self):
return self.name class Student(Base):
__tablename__ = 'student'
qq = Column(String(64), primary_key=True)
name = Column(String(64), nullable=False)
password = Column(String(64), nullable=False, default='321cba') # steachers = relationship('Teacher', secondary=task_t, backref='students')
sbatchs = relationship('Batch', secondary=studentBatch_t, backref='students') def __repr__(self):
return self.name # 课程批次(班级)name为批次如python14期,courseType为类型如python
class Batch(Base):
__tablename__ = 'batch'
name = Column(String(64), primary_key=True)
courseType = Column(String(64), nullable=False) def __repr__(self):
return self.name + self.courseType class Task(Base):
__tablename__ = 'task'
batch_name = Column(String(64), ForeignKey('batch.name'))
date = Column(DATE, nullable=False)
student_qq = Column(String(64), ForeignKey('student.qq')) status = Column(Enum('at', 'ab', 'va', 'ot'),
default='ab', nullable=False)
score = Column(Integer,
default=0, nullable=False)
teacher_id = Column(String(64), ForeignKey('teacher.id')) comment = Column(String(1024))
task_pk = PrimaryKeyConstraint(batch_name, student_qq, date) student = relationship('Student', backref='tasks')
teacher = relationship('Teacher', backref='tasks') # 父类调用所有的子类实现表结构的创建##### # Base.metadata.drop_all(db_settings.engine) # 删除表结构
Base.metadata.create_all(db_settings.engine) # 创建表结构
tables relationship
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__Author__ = "Zhang Xuyao" from settings import db_tables as dbt
from settings import db_settings
from sqlalchemy.orm import sessionmaker
from sqlalchemy import desc,func
import datetime Session_class = sessionmaker(bind=db_settings.engine) # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
db = Session_class() # 生成session实例 def teacherAuth(id, password):
obj = db.query(dbt.Teacher).filter(dbt.Teacher.id == id).first()
if not obj:
return False
if password == obj.password:
# print("got it")
return obj
else:
return False def studentAuth(qq, password):
obj = db.query(dbt.Student).filter(dbt.Student.qq == qq).first()
if not obj:
return False
if password == obj.password:
# print("got it")
return obj
else:
return False def addTeacher(id, name, password='abc123'):
obj = dbt.Teacher(id=id, name=name, password=password)
db.add(obj)
db.commit()
return obj def batchBindTeacher(id, name, password):
pass def addStudent(qq, name, password='abc123'):
obj = dbt.Student(qq=qq, name=name, password=password)
db.add(obj)
db.commit()
return obj def batchBindStudent(id, name, password):
pass def addBatch(name, courseType):
obj = dbt.Batch(name=name, courseType=courseType)
db.add(obj)
db.commit()
return obj def addTask(date, score='N/A', status='absent'):
pass if __name__ == '__main__':
t1 = addTeacher('t001', "Alex", "Alex123")
t2 = addTeacher('t002', "Jack", "Jack123")
t3 = addTeacher('t003', "Rain", "Rain123")
#
s1 = addStudent('s001', "chenronghua", "abc123")
s2 = addStudent('s002', "niuhanyang", "abc123")
s3 = addStudent('s003', "wangsen", "abc123")
#
b1 = addBatch("python14", "python")
b2 = addBatch("pythonS2", "python")
b3 = addBatch("Ops10", "Linux") b1.students = [s1, s2, s3]
b1.teachers = [t1, t2] for i in b1.students:
obj = dbt.Task(date='2016-10-26', teacher_id=t1.id, student_qq=i.qq, batch_name=b1.name)
db.add(obj)
db.commit()
#
# obj = db.query(dbt.Teacher).filter(dbt.Teacher.id == "t001").first()
# for i in obj.tbatchs:
# if i.name == 'python14':
# for j in i.students:
# if j.qq == 's001':
# print(j.name, j.password) pass
db handler
那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM的更多相关文章
- 《Python 学习手册4th》 第十一章 赋值、表达式和打印
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- Python:从入门到实践--第十一章--测试代码--练习
#1.城市和国家:编写一个函数,它接受两个形参:一个城市名和一个国家名. #这个函数返回一个格式为City,Country的字符串,如Santiago,Chile.将这个函数 #存储在一个名为city ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 使用Python将Excel中的数据导入到MySQL
使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...
- Python MySQL ORM QuickORM hacking
# coding: utf-8 # # Python MySQL ORM QuickORM hacking # 说明: # 以前仅仅是知道有ORM的存在,但是对ORM这个东西内部工作原理不是很清楚, ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
- 编程入门视频【 Python、PHP、ThinkPHP、Laravel、Mysql、微信小程序】
免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程序等学习视频 点击进入搜刮 免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程 ...
- 《python for data analysis》第七章,数据规整化
<利用Python进行数据分析>第七章的代码. # -*- coding:utf-8 -*-# <python for data analysis>第七章, 数据规整化 imp ...
- 《python for data analysis》第五章,pandas的基本使用
<利用python进行数据分析>一书的第五章源码与读书笔记 直接上代码 # -*- coding:utf-8 -*-# <python for data analysis>第五 ...
随机推荐
- Django教程:第一个Django应用程序(4)
Django教程:第一个Django应用程序(4) 2013-10-09 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 #博客: ...
- 容斥原理应用(求1~r中有多少个数与n互素)
问题:求1~r中有多少个数与n互素. 对于这个问题由容斥原理,我们有3种写法,其实效率差不多.分别是:dfs,队列数组,位运算. 先说说位运算吧: 用二进制1,0来表示第几个素因子是否被用到,如m=3 ...
- ecshop判断搜索引擎是否为蜘蛛
<?php /** * 判断是否为搜索引擎蜘蛛 * * @access public * @return string */ function is_spider($record = true) ...
- 洛谷 P1005 矩阵取数游戏
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...
- 用ChooseALicense帮自己选一个开源license,然后用AddALicense给自己的github自动加上license文件
在我之前的一篇博客里面介绍过tl;drLegal ——开源软件license的搜索引擎,可以很方便的查询各种license,并且给出了很简洁的解释.今天又发现了另外一个帮助你选择你的开源软件licen ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...
- [置顶] iptables 性能 测试
一直研究iptables 性能,这几天刚好有硬件资源,于是发始下手测试iptables NAT 性…… 硬件环境 : 服务器: IBM x3650 ( 4G E5645 6核 12线程) ESXi ...
- MYSQL 缓存详解 [myownstars] 经典博客
http://blog.itpub.net/15480802/viewspace-755582/ 在服务器级别只提供了query cache,而在存储引擎级别,MyISAM和InnoDB分别引入了ke ...
- Qt数据库sqlite总结
QSqlDatabase类实现了数据库连接的操作QSqlQuery类用来执行SQL语句QSqlRecord类封装数据库所有记录QSqlRelationalTableModelQSqlQueryMo ...
- ZOJ 3905 Cake(贪心+dp)
动态规划题:dp[i][j]表示有i个Cake,给了Alice j个,先按照b排序,这样的话,能保证每次都能成功给Alice Cake,因为b从大到小排序,所以Alice选了j个之后,Bob最少选了j ...