天天看點

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