• 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)

     

     

     

  • 相关阅读:
    题型:系统可靠性
    计算机基础——网络存储
    传输层——TCP的流量控制服务
    传输层——UDP和TCP的对比
    配置——VLAN
    项目管理——PERT图
    从“派生类不能访问基类对象的protected成员”开始讨论各类成员的“可见性”
    cin.clear()和cin.sync
    华为编程大赛——路径查找
    华为编程大赛——求表达式的值
  • 原文地址:https://www.cnblogs.com/wen-kang/p/9527751.html
Copyright © 2020-2023  润新知