我们在使用SQLAlchemy做数据的增删改查操作,我们是通过session对象来实现的。
构建session对象:所有和数据库的ORM操作都必须通过一个叫做
session
的会话对象来实现,通过以下代码来获取会话对象:from sqlalchemy.orm import sessionmaker engine = create_engine(DB_URI) session = sessionmaker(engine)()
添加对象:
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()
查找对象:
# 查找某个模型对应的那个表中所有的数据: 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。可能是姿势不对修改对象:首先从数据库中查找对象,然后将这条数据修改为你想要的数据,最后做commit操作就可以修改数据了。
user = session.query(User).first() user.name = 'boke' session.commit()
删除对象:将需要删除的数据从数据库中查找出来,然后使用
session.delete
方法将这条数据从session中删除,最后做commit操作就可以了。user = session.query(User).first() session.delete(user) session.commit()