分享

sqlalchemy操作数据库(二)

 新用户0175WbuX 2022-02-03

  sqlalchemy的基本操作

  表结构如下:

  fromsqlalchemyimportcreate_enginefromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemyimportColumn,String,

  Integerfromsqlalchemy.ormimportsessionmaker engine=create_engine("mysql+

  mysqlconnector://root:123456@127.0.0.1:3306/data",encoding='utf8') Base=declarative_base()# 生成ORM基类# 建立表结构classStudent(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()

  数据库中的数据,如图

  sqlalchemy操作数据库(二)

  image

  1.查询并返回第一条数据

  data=session.query(Student).filter_by(id=1).first()print(data)

  sqlalchemy操作数据库(二)

  image

  咦,返回的怎么是一个obj对象,这我们怎么知道它是谁。那我们需要看到它对应的值,应该怎么做,

  很简单,调用对应的参数就能显示对应的值

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

  sqlalchemy操作数据库(二)

  image

  2.查询多条or所有数据

  不带条件查询所有数据

  data=session.query(Student).all()print(data)

  all() 默认返回的是一个内存对象的列表,而内存对象不能很直观的告诉我们

  数据是谁的?当我们想要看到更直观的数据时,有没有什么解决方法呢?

  当然有,于是聪明的程序员就想出来了下面的方法

  sqlalchemy操作数据库(二)

  image

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

  sqlalchemy操作数据库(二)

  image

  sqlalchemy操作数据库(二)

  image

  带条件查询:

  data=session.query(Student).filter_by(id=1,name="狗蛋").all() print(data)

  sqlalchemy操作数据库(二)

  image

  多条件查询:

  data=session.query(Student).filter(Studet.id>=1).filter(Student.gender=="中").all() print(data)

  总结:

  filter_by: 用于赋值条件查询

  filter: 用于判断条件查询

  sqlalchemy操作数据库(二)

  image

  3.修改单条数据

  data=session.query(Student).filter_by(id=1).first()# 修改前print(data.gender)

  data.gender="男和女"# 修改后print(data.gender)# 最后提交sessionmit()

  4.批量修改证书数据

  # 修改前data=session.query(Student).filter(Student.id>=1).all()print(data)# 修改后session.query(Student).filter(Student.id>=1).update({Student.name:'麒麟狗'})print(data)# 最后提交sessionmit()

  sqlalchemy操作数据库(二)

  image

  5.添加数据

  # 增加前data=session.query(Student).filter(Student.id>=1).all()print(data)# 修改后s_obj=Student(name='小呆',gender='男',email='10000@qq')

  session.add(s_obj)# 此时还没有添加到数据库print(data)# 最后提交sessionmit()# 这时候数据才真正添加data=session.query(Student).filter(Student.id>=1).all()print(data)

  sqlalchemy操作数据库(二)

  image

  sqlalchemy操作数据库(二)

  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'%i)

  lis.append(s_obj)

  session.add_all(lis)# 此时还没有添加到数据库print(data)# 最后提交sessionmit()# 这时候数据才真正添加data=session.query(Student).filter(Student.id>=1).all()print(data)

  sqlalchemy操作数据库(二)

  image

  sqlalchemy操作数据库(二)

  image

  7.删除数据

  # 删除前data=session.query(Student).filter(Student.id>=1).all()print(data)# 删除后session.query(Student).filter_by(id=1).delete()# 此时还没有添加到数据库print(data)# 最后提交sessionmit()# 这时候数据才真正删除data=session.query(Student).filter(Student.id>=1).all()print(data)

  删除多条数据与增加雷同,就不做介绍了

  sqlalchemy操作数据库(二)

  image

  sqlalchemy操作数据库(二)

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

  sqlalchemy操作数据库(二)

  image

  sqlalchemy操作数据库(二)

  image

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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多