zoukankan      html  css  js  c++  java
  • sqlalchemy

    SQLAlchemy是python下的一个ORM框架,该框架建立在API之上,使用关系对象映射进行数据录操作。

    就是将对象转换成sql语句然后使用API执行SQL并获取执行结果。

    说先在终端中安装SQLAlchemy:  pip3 install SQLAlchemy

    创建表:

    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
    from sqlalchemy.orm import sessionmaker, relationship
    from sqlalchemy import create_engine
     
    engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5)
     
    Base = declarative_base()

    它创建表之间的对应关系和在sql语句思路相同只是实现方式上不同:

    创建单表

    class Users(Base):
        __tablename__ = 'users'
        id = Column(Integer, primary_key=True)
        name = Column(VARCHAR(32))
        extra = Column(VARCHAR(16))
     添加唯一联合索引,普通唯一索引
        __table_args__ = (
        UniqueConstraint('id', 'name', name='uix_id_name'),
            Index('ix_id_name', 'name', 'extra'),
        )

    一对多:

    class Favor(Base):
        __tablename__ = 'favor'
        nid = Column(Integer, primary_key=True)
        caption = Column(VARCHAR(50), default='red', unique=True)
     
     
    class Person(Base):
        __tablename__ = 'person'
        nid = Column(Integer, primary_key=True)
        name = Column(VARCHAR(32), index=True, nullable=True)
    创建外键 favor_id
    = Column(Integer, ForeignKey("favor.nid"))

    多对多:

    class Group(Base):
        __tablename__ = 'group'
        id = Column(Integer, primary_key=True)
        name = Column(VARCHAR(64), unique=True, nullable=False)
        port = Column(Integer, default=22)
     
     
    class Server(Base):
        __tablename__ = 'server'
     
        id = Column(Integer, primary_key=True, autoincrement=True)
        hostname = Column(VARCHAR(64), unique=True, nullable=False)
     
     
    class ServerToGroup(Base):
        __tablename__ = 'servertogroup'
        nid = Column(Integer, primary_key=True, autoincrement=True)
        server_id = Column(Integer, ForeignKey('server.id'))
        group_id = Column(Integer, ForeignKey('group.id'))
      

    删除表结构,增加表结构

    def init_db():
        Base.metadata.create_all(engine)
    
    def drop_db():
        Base.metadata.drop_all(engine)

    提交事务,及完成后关闭

    session.commit()
    session.close()

    查询数据:

    查询一条
    res = session.query(UserType).first()
    
    # print(res)# <__main__.UserType object at 0x000001BC436F2668> 查询一条结果对象,以元组的形式的打印出来,可以
    # 直接点 出它所有的属性
    print(res.id,res.name)
    # 查询多条数据
    res = session.query(UserType).all()
    # print(res)
    # res 打印结果
    # [<__main__.UserType object at 0x0000025D85E52278>,
    # <__main__.UserType object at 0x0000025D85E52240>]
    # 是将表中数据数据以元组的形式打印出来,并统一装在一个列表中,想要取出我们想要的结果的就要先将
    # 他们遍历出来,在通过点方法查看数据
    for row in res:
        print(row.id,row.name)
    # 查询
    res = session.query(UserType).all()
    for i in res:
        print(i.id,i.name)

    添加数据到表中

    # 添加多条数据
    session.add_all([
        UserType(name='爹爹'),
        UserType(name='亲爹'),
        UserType(name='野爹')
    ])
    
    session.add_all([
        User(name='阿花',extra='头牌',type_id=1),
        User(name='阿春',extra='花魁',type_id=2),
        User(name='阿香',extra='幺二',type_id=2),
        User(name='阿纯',extra='三长',type_id=3)
    ])
    

     删除数据

    # 删除
    session.query(User).filter(User.name =='阿花').delete()

    修改数据

    # 修改
    session.query(User).filter(User.id == 2).update({'extra':'书寓'})

    查询高级

    # 查询高级
    
    # res = session.query(User).filter(User.id.between(2,4)).all()
    # for row in res:
    #     print(row.id,row.name,row.extra)
    
    # res = session.query(User).filter(User.id.in_([2,3,4])).first()
    # # # print(res)
    # # for row in res:
    # print(res.id,res.name,res.extra)

    连表查询

    # 查询一个用户下有哪些类型
    res  = session.query(User).all()
    for row in res:
        print(row.id,row.name,row.extra,row.usertype.name)
    
    # 查询一个类型下有哪些用户
    res = session.query(UserType).all()
    for row in res:
        print(row.id,row.name,row.大爷)

     根据外键id分组比大小

    from sqlalchemy import func
    res = session.query(User.type_id,func.max(User.id),func.min(User.id)).group_by(User.type_id).all()
    # print(res)
    # res = session.query(func.max(User.id),func.min(User.id)).group_by(User.type_id).all()se
    print(res)

     

  • 相关阅读:
    20145228《网络对抗》逆向及Bof基础
    20145228《信息安全系统设计基础》课程总结
    20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践
    20145203盖泽双 《网络对抗技术》实践八:Web基础
    20145203盖泽双 《网络对抗技术》实践七:网络欺诈技术防范
    20145203盖泽双《网络对抗技术》实践六:信息搜集与漏洞扫描
    20145203盖泽双《网络对抗技术》实践五:MSF基础应用
    20145203盖泽双《网络对抗技术》实践四:恶意代码分析
    20145203 盖泽双《网络对抗技术》免杀原理与实践
    20145203盖泽双《网络对抗技术》后门原理与实践
  • 原文地址:https://www.cnblogs.com/1624413646hxy/p/11047037.html
Copyright © 2011-2022 走看看