当前位置: 代码迷 >> 综合 >> SQLALchemy(三)
  详细解决方案

SQLALchemy(三)

热度:60   发布时间:2023-11-25 02:26:59.0

数据的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()

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

  1. equals : ==
news= session.query(News).filter(News.title == "title1").first()
  1. not equals : !=
query(User).filter(User.name != 'ed')
  1. like & ilike [不区分大小写]:
query(User).filter(User.name.like('%ed%'))
  1. in:
query(User).filter(User.name.in_(['ed','wendy','jack']))
  1. not in:
query(User).filter(~User.name.in_(['ed','wendy','jack']))
  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:
query(User).filter(or_(User.name=='ed',User.name=='wendy'))

聚合函数
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()