我们在使用SQLAlchemy做数据的增删改查操作,我们是通过session对象来实现的。

  1. 构建session对象:所有和数据库的ORM操作都必须通过一个叫做session的会话对象来实现,通过以下代码来获取会话对象:

    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine(DB_URI)
    session = sessionmaker(engine)()
  2. 添加对象:

    class User(Base):
        __tablename__ = 'user'
    
        id = Column(Integer,primary_key=True,autoincrement=True)
        name = Column(String(50))
        age = Column(Integer)
    • 创建对象,也即创建一条数据:

      u = User(name='xiaoning',age=18,country='china')
    • 将这个对象添加到session会话对象中:

      session.add(u)
    • 将session中的对象做commit操作(提交):

      session.commit()
    • 一次性添加多条数据:

      u1 = User(name='xiaoning',age=19,country='china')
      u2 = User(name='boke',age=20,country='china')
      session.add_all([u1,u2])
      session.commit()
  3. 查找对象:

    # 查找某个模型对应的那个表中所有的数据:
    all_user = session.query(User).all()
    # 使用filter_by来做条件查询
    all_user = session.query(User).filter_by(name='xiaoning').all()
    # 使用filter来做条件查询
    all_user = session.query(User).filter(User.name=='xiaoning').all()
    # 使用get方法查找数据,get方法是根据id来查找的,只会返回一条数据或者None
    user = session.query(User).get(primary_key)
    # 使用first方法获取结果集中的第一条数据
    user = session.query(User).first()

    小编在下一篇文章中将详细讲解查询。

    SQLAlchemy中filter()和filter_by()的区别
    1、filter引用列名时,使用“类名.属性名”的方式,比较使用两个等号“==”
    2、filter_by引用列名时,使用“属性名”,比较使用一个等号“=”
    3、在使用多条件匹配的时候,filter需要借助sqlalchemy里的and_ ; 而filter_by不需要,直接把多个匹配条件写在一起
    4、在使用多条件匹配时,用到>=、>、<=、<的情况,貌似不能使用filter_by。可能是姿势不对
  4. 修改对象:首先从数据库中查找对象,然后将这条数据修改为你想要的数据,最后做commit操作就可以修改数据了。

    user = session.query(User).first()
    user.name = 'boke'
    session.commit()
  5. 删除对象:将需要删除的数据从数据库中查找出来,然后使用session.delete方法将这条数据从session中删除,最后做commit操作就可以了。

    user = session.query(User).first()
    session.delete(user)
    session.commit()
Last modification:May 9, 2020
If you think my article is useful to you, please feel free to appreciate