zoukankan      html  css  js  c++  java
  • mysql_orm模块操作数据库(17.6.29)

     

    一、介绍

    二、基本操作

    创建表:  

     1 from sqlalchemy import create_engine
     2 from sqlalchemy.ext.declarative import declarative_base
     3 from sqlalchemy import Column,Integer,String,ForeignKey,UniqueConstraint,Index
     4 from sqlalchemy.orm import sessionmaker, relationship
     5 
     6 engine = create_engine("mysql+pymysql://root:Www123...@127.0.0.1:3306/db_all?charset=utf8",max_overflow=5 ) #创建连接
     7 #,max_overflow=5  这个参数是什么意思
     8 Base = declarative_base()   #指定基类
     9 
    10 class User(Base):       #创建表单
    11     __tablename__ = "user"   #表单名称
    12     id = Column(Integer,primary_key=True)  
    13     name = Column(String(32),unique=True)  
    14     pasword = Column(String(32),index=True)
    创建一个空表单的基本操作
    from sqlalchemy import create_engine
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Column,Integer,String,ForeignKey,UniqueConstraint,Index
    from sqlalchemy.orm import sessionmaker, relationship
    
    engine = create_engine("mysql+pymysql://root:Www123...@127.0.0.1:3306/db_all?charset=utf8",max_overflow=5 ) #创建连接
    #,max_overflow=5  这个参数是什么意思
    Base = declarative_base()   #指定基类
    
    class User(Base):       #创建表单
        __tablename__ = "user"   #表单名称
        id = Column(Integer,primary_key=True)
        name = Column(String(32),unique=True)
        pasword = Column(String(32),index=True)
    
    
    
    Base.metadata.create_all(engine)   #找到所有子类创建子类,创建一个空表单
    # Base.metadata.drop_all(engine)   #找到所有子类并删除
    
    tab_values = User(name='coob2',pasword='www123...')  #指定往哪个类里面添加什么内容
    
    # 指定引擎  增删改 都要用到这些几句  实在是看不明白;
    Session = sessionmaker(bind=engine)
    session = Session()
    
    #增删改操作
    session.add(tab_values)
    
    #提交
    session.commit()
    添加第一条数据

    增:

    session.add_all([
        User(name="李四", pasword='lisi'),
        User(name="汪五", pasword='wangwu'),
    ])
    #提交
    session.commit()
    添加多条数据

    删:

    #
    session.query(User).filter(User.id > 2).delete()
    session.query(User).filter_by(name = '汪五').delete()
    
    #提交
    session.commit()
    删除数据

    改:

    session.query(Users).filter(Users.id > 2).update({"name" : "nick"})
    session.query(Users).filter(Users.id > 2).update({"name" : "nick", "extra":"niubily"})
    session.query(Users).filter(Users.id > 2).update({Users.name: Users.name + "Suo"}, synchronize_session=False)
    session.query(Users).filter(Users.id > 2).update({"num": Users.num + 1}, synchronize_session="evaluate")
    session.commit()
    数据修改

    查:

    class User(Base):       #创建表单
        __tablename__ = "user"   #表单名称
        id = Column(Integer,primary_key=True)
        name = Column(String(32),unique=True)
        pasword = Column(String(32),index=True)
    
    #只有在类中创建这个方法才可以把查到数据由 对象 转换成 可识别数据 
        def __repr__(self):
            return "%s-%s" % (self.id, self.name)
    
    # 查
    ret = session.query(User).all()
    print(ret) 

    索引:

    __table_args__ = (
        UniqueConstraint('id', 'name', name='uix_id_name'), # 唯一索引
        Index('ix_id_name', 'name', 'extra'),   # 普通索引
        )
    索引设置

    三、连表操作

      1.一对多

    class User(Base):      
        __tablename__ = "user"   
        id = Column(Integer,primary_key=True,nullable=True)
        name = Column(String(32),nullable=False,default="作死",autoincrement=True)
        pasword = Column(String(32),index=True)
    
    
    #ForeignKey   指定关联表名和表列
        team_id = Column(Integer,ForeignKey('team.id'))

      2.多对多

    class User(Base):       
        __tablename__ = "user"   
        id = Column(Integer,primary_key=True,nullable=True)
    
    
        #与其他表建立关联
        part_id = Column(Integer,ForeignKey('part.id'))
        team_id = Column(Integer,ForeignKey('team.id'))
    

      

  • 相关阅读:
    RT-SA-2019-005 Cisco RV320 Command Injection Retrieval
    RT-SA-2019-003 Cisco RV320 Unauthenticated Configuration Export
    RT-SA-2019-004 Cisco RV320 Unauthenticated Diagnostic DataRetrieval
    RT-SA-2019-007 Code Execution via Insecure Shell Functiongetopt_simple
    APPLE-SA-2019-3-25-1 iOS 12.2
    APPLE-SA-2019-3-25-5 iTunes 12.9.4 for Windows
    APPLE-SA-2019-3-25-6 iCloud for Windows 7.11
    APPLE-SA-2019-3-25-4 Safari 12.1
    Mybatis下的sql注入
    java代码审计中的一些常见漏洞及其特征函数
  • 原文地址:https://www.cnblogs.com/learn-python-M/p/7095121.html
Copyright © 2011-2022 走看看