資料的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方法實作的
- equals : ==
- not equals : !=
- like & ilike [不區分大小寫]:
- in:
- not in:
- is null:
query(User).filter(User.name==None)
query(User).filter(User.name.is_(None))
- is not null:
query(User).filter(User.name != None)
query(User).filter(User.name.isnot(None))
- 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')
- 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()