Python.Sqlalchemy.使用OEM相關語句

新增數據

user = User(name='a')
session.add(user)
user = User(name='b')
session.add(user)
user = User(name='a')
session.add(user)
user = User()
session.add(user)
session.commit()

使用User表相關操作

from sqlalchemy import func, or_, not_
import sqlalchemy as SA

print session.query(User) # 顯示SQL 語句
print session.query(User).statement # 同上
for user in session.query(User): # 遍歷時查詢
    print user.name
print session.query(User).all() # 返回的是一個類似列表的對象
print session.query(User).first().name # 記錄不存在時,first() 會返回 None
print session.query(User).one().name # 不存在,或有多行記錄時會拋出異常
print session.query(User).filter(User.id == 2).first()
print session.query(User).get(2) # 以主鍵獲取,等效於上句
print session.query(User).filter('id = 2').first().name # 支持字符串

print session.query(User).all() # 每行是個元組
print session.query(User).limit(1).all() # 最多返回 1 條記錄
print session.query(User).offset(1).all() # 從第 2 條記錄開始返回
print session.query(User).order_by(User.name).all()
print session.query(User).order_by('name').all()
print session.query(User).order_by(User.name.desc()).all()
print session.query(User).order_by('name desc').all()
print session.query(User).order_by(User.name.desc(), User.id).all() # 幾種排序方式
print session.query(User).filter(User.id == 1).scalar() # 如果有記錄,返回第一條記錄的第一個元素
print session.query('id').select_from(User).filter('id = 1').scalar()

print session.query(User).filter(User.id > 1, User.name != 'a').scalar() # and
print session.query(User).filter(
    SA._and(User.id > 1, User.name != 'a')).scalar() # and
print session.query(User).filter(or_(User.id == 1, User.id == 2)).all() # or
print session.query(User).filter(User.id.in_((1, 2))).all() # in

print session.query(User).filter(not_(User.name == None)).all() # not
print session.query(User).filter(User.name == None).scalar()
print session.query(User).filter('name is null').scalar()
print session.query(User).filter(User.name != None).all()

print session.query(func.count('*')).select_from(User).scalar()
print session.query(func.count('1')).select_from(User).scalar()
print session.query(func.count(User.id)).scalar()
print session.query(func.count('*')).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表
print session.query(func.count('*')).filter(User.name == 'a').limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回數
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 後可以跟任意函數名,只要該數據庫支持
print session.query(func.current_timestamp()).scalar()
print session.query(func.md5(User.name)).filter(User.id == 1).scalar()

session.query(User).filter(User.id == 1).update({User.name: 'c'})
user.name = 'd'
session.flush() # 寫數據庫,但並不提交

print session.query(User).get(1).name
session.delete(user)
session.flush()
print session.query(User).get(1)
session.rollback() # 回滾操作

print session.query(User).get(1).name
session.query(User).filter(User.id == 1).delete()

session.commit() # 提交
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章