天天看点

SQLALchemy(三)

数据的CRUD操作

1、 构建session对象:

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

from sqlalchemy.orm import sessionmaker
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)() # 注意,返回的是一个函数,实现了__call__方法
           

2、添加对象:

#创建对象,也即创建一条数据:
p1 = Person(name='momo1',age=19,country='china')
# 将这个对象添加到`session`会话对象中:
session.add(p1)
# 将session中的对象做commit操作(提交):
session.commit()
# 一次性添加多条数据:
p1 = Person(name='momo1',age=19,country='china')
p2 = Person(name='momo2',age=20,country='china')
session.add_all([p1,p2])
session.commit()
           

3、 查找对象:

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

filter过滤条件:

过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的

  1. equals : ==
  1. not equals : !=
  1. like & ilike [不区分大小写]:
  1. in:
  1. not in:
  1. is null:
query(User).filter(User.name==None)
query(User).filter(User.name.is_(None))
           
  1. is not null:
query(User).filter(User.name != None)
query(User).filter(User.name.isnot(None))
           
  1. and:
query(User).filter(and_(User.name=='ed',User.fullname=='Ed Jones'))
# 或者是传递多个参数
query(User).filter(User.name=='ed',User.fullname=='Ed Jones')
# 或者是通过多次filter操作
query(User).filter(User.name=='ed').filter(User.fullname=='Ed Jones')
           
  1. or:

聚合函数

func.count:统计行的数量

func.avg:求平均值

func.max:求最大值

func.min:求最小值

func.sum:求和

#3.mysql聚合函数
r = session.query(func.count(News.id)).first()
print(r)
r = session.query(func.max(News.price)).first()
print(r)
r = session.query(func.min(News.price)).first()
print(r)
r = session.query(func.avg(News.price)).first()
print(r)r = session.query(func.sum(News.price)).first()
print(r)
           

4、修改对象:

首先从数据库中查找对象,然后将这条数据修改为你想要的数据,最后做commit操作就可以修改数据了。

person = session.query(Person).first()
person.name = 'laoxiao'
session.commit()
           

5、删除对象:

将需要删除的数据从数据库中查找出来,然后使用 session.delete 方法将这条数据从session中删除,最后做commit操作就可以了。

person = session.query(Person).first()
session.delete(person)
session.commit()