• sqlalchemy操作数据库(二)


    sqlalchemy的基本操作

    表结构如下:

    from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy import Column,String,Integerfrom sqlalchemy.orm importsessionmaker engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/data",encoding='utf8') Base = declarative_base() # 生成ORM基类# 建立表结构class Student(Base):    __tablename__ = 'student'    id = Column(Integer,primary_key=True)    name = Column(String(32))    gender = Column(String(32))    email = Column(String(64)) Session_class = sessionmaker(bind=engine)# 创建一个session对象session = Session_class()

    数据库中的数据,如图

    image

    1.查询并返回第一条数据
    data = session.query(Student).filter_by(id=1).first()print(data)

    image

    咦,返回的怎么是一个obj对象,这我们怎么知道它是谁。那我们需要看到它对应的值,应该怎么做,
    很简单,调用对应的参数就能显示对应的值

    print(data.id,data.name,data.gender,data.email)

    image

    2.查询多条or所有数据
    不带条件查询所有数据
    data = session.query(Student).all()print(data)
    
    all() 默认返回的是一个内存对象的列表,而内存对象不能很直观的告诉我们
    数据是谁的?当我们想要看到更直观的数据时,有没有什么解决方法呢?
    当然有,于是聪明的程序员就想出来了下面的方法

    image

    重写repr函数,使返回值更加清晰的显示

    image

    image

    带条件查询:
        data = session.query(Student).filter_by(id=1,name="狗蛋").all()    print(data)

    image

    多条件查询:
        data = session.query(Student).filter(Studet.id>=1).filter(Student.gender=="中").all()    print(data)
    
    总结:
            filter_by:  用于赋值条件查询
            filter:     用于判断条件查询

    image

    3.修改单条数据
    data = session.query(Student).filter_by(id=1).first()# 修改前print(data.gender)
    data.gender = "男和女"# 修改后print(data.gender)# 最后提交session.commit()
    4.批量修改数据
    # 修改前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后session.query(Student).filter(Student.id>=1).update({Student.name:'麒麟狗'})print(data)# 最后提交session.commit()

    image

    5.添加数据
    # 增加前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后s_obj = Student(name='小呆',gender='男',email='10000@qq.com')
    session.add(s_obj)# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正添加data = session.query(Student).filter(Student.id>=1).all()print(data)

    image

    image

    6.批量增加数据
    # 增加前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后lis = []for i in range(10):
        s_obj = Student(name='小呆'+str(i),gender='男',email='10000%s@qq.com'%i)
        lis.append(s_obj)
    session.add_all(lis)# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正添加data = session.query(Student).filter(Student.id>=1).all()print(data)

    image

    image

    7.删除数据
    # 删除前data = session.query(Student).filter(Student.id>=1).all()print(data)# 删除后session.query(Student).filter_by(id=1).delete()# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正删除data = session.query(Student).filter(Student.id>=1).all()print(data)
    
    删除多条数据与增加雷同,就不做介绍了

    image

    image

    8.回滚
    data = session.query(Student).filter(Student.id>=1).all()print(data)
    
    s = Student(name='胖毛')
    session.add(s)
    
    data = session.query(Student).filter(Student.id>=1).all()print(data)# 回滚session.rollback()

    image

    image

    SQLalchemy的增删查改就介绍到这里为止了。



  • 相关阅读:
    LeetCode算法训练
    重新整理自己的博客
    VS2019制作安装包与ClickOnce部署
    2020年系统架构设计师考试通过总结
    合并两个有序数组为一个新的有序数组
    Inno Setup 出现 the drive or unc share you selected does not exist or is not accessible 解决记录
    60秒定位问题,十倍程序员的Debug日常
    这几个神秘参数,教你TDengine集群的正确使用方式
    存储成本仅为OpenTSDB的1/10,TDengine的最大杀手锏是什么?
    基于TDengine进行睿信物联网平台的迁移改造
  • 原文地址:https://www.cnblogs.com/liulinghua90/p/8794262.html
Copyright © 2020-2023  润新知