1. 提取共性
2. 分类
3. 模板“约束”
4. 当一类函数公用同样参数时候,可以转变成类进行 - 分类
3. 面向对象: 数据和逻辑(属性和行为)组合在一起
函数编程:数据和逻辑分离
1 特殊方法:
2 class Foo:
3 def __init__(self,name):
4 self.name = name
5
6
7 def show(self):
8 print(self.name)
9
10 def __call__(self):
11 pass
12
13 def __getitem__(self,key):
14 pass
15
16 def __setitem__(self,key,value):
17 pass
18
19 def __delitem__(self,key):
20 pass
21
22 obj1 = Foo('eric')
23
24 obj1()
25 obj1['k']
26 obj1['k'] = 123
27 del obj[k]
28 obj.__dict__
>>>>>>>>>>>>>>>>>>>对象后面直接加括号调用call方法 Python特有的
SQLAlchemy的增删改查操作:
1 import pymysql
2 from sqlalchemy.ext.declarative import declarative_base
3 from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint,Index
4 from sqlalchemy.orm import sessionmaker, relationships
5 from sqlalchemy import create_engine
6
7 Base = declarative_base()
8 #创建表
9 def create_db():
10 engine = create_engine("mysql+pymysql://kevin:12121@127.0.0.1:3306/manage?charset=utf8", max_overflow=5)
11 Base.metadata.create_all(engine)
12 #删除表
13 def drop_db():
14 engine = create_engine("mysql+pymysql://kevin:12121@127.0.0.1:3306/manage?charset=utf8", max_overflow=5)
15 Base.metadata.drop_all(engine)
16
17
18 class UserInfo(Base):
19 __tablename__ = 'userinfo'
20 id = Column(Integer, primary_key=True, autoincrement=True)
21 name = Column(String(36), nullable=True)
22 age = Column(Integer)
23 email = Column(String(20), index=True)
24 utp_id = Column(Integer, ForeignKey('usertype.uid'))
25
26 __table_args__ = (
27 UniqueConstraint('id', 'email', name='ix_id_mail'),
28 Index('mail_name','email','utp_id'),
29 )
30
31 def __repr__(self):
32 return "%s-%s-%s" % (self.name,self.age,self.email)
33
34 class UserType(Base):
35 __tablename__ = 'usertype'
36 uid = Column(Integer, primary_key=True, autoincrement=True)
37 title = Column(String(30), nullable=True, index=True)
38
39 #插入数据
40
41 engine = create_engine("mysql+pymysql://kevin:12121@127.0.0.1:3306/manage?charset=utf8", max_overflow=5)
42 Session=sessionmaker(bind=engine)
43 session=Session()
44 # obj1=UserInfo(name='kevin',age=18,email='asax@sina.com')
45 # ses.add(obj1)
46 #类--->表
47 #对象---->行
48
49 # objs=[
50 # UserType(title='普通会员'),
51 # UserType(title='银牌会员'),
52 # UserType(title='黄金会员'),
53 # UserType(title='钻石会员'),
54 # ]
55 # session.add_all(objs) #记录写入表中
56
57 #查询
58 # type_list=session.query(UserType).all()
59 # print(session.query(UserType)) #查询select SQL语句
60 #SELECT usertype.uid AS usertype_uid, usertype.title AS usertype_title FROM usertype
61 # for row in type_list:
62 # print(row.uid,row.title)
63
64 #删除
65 # info_list=session.query(UserInfo).filter(UserInfo.id>2).delete()
66 # for row in info_list:
67 # print(row.name,row.email)
68
69 #修改 字符串的修改
70 # info_list=session.query(UserInfo).filter(UserInfo.id>0).update({UserInfo.name:UserInfo.name+'_cn'},synchronize_session=False)
71
72 #进行数字的计算
73 info_list=session.query(UserInfo).filter(UserInfo.id>0).update({UserInfo.age:UserInfo.age+5},synchronize_session='evaluate')
74
75 session.commit() #提交
76 session.close()
77
78 create_db()
子查询操作:
1 # s1=session.query(UserInfo).filter(UserInfo.id>2)
2 # s2=session.query(UserType).filter(UserType.uid<2)
3 # ret1=s1.union(s2).all() #两次结果连接自动去重
4 # ret2=s1.union_all(s2).all() #两次结果连接全部值 不去重
5 ret=session.query(UserType,session.query(UserInfo).filter(UserInfo.age>20).subquery())
6 # ret=session.query(UserType.uid,session.query(UserInfo).filter(UserInfo.id==UserType.uid).as_scalar())
7 print(ret)