ORM(关系对象映射)框架之面向对象

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)

 

 

 

 

posted @ 2018-08-24 08:32  青红*皂了个白  阅读(169)  评论(0)    收藏  举报