Flask-Sqlalchemy 集成和常用查詢命令

集成 

from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql://fw_zhq:[email protected]:5432/fw_db2" # 數據地址
db = SQLAlchemy(app)

使用

  1. 查詢
    User.query.all()

    查詢單個

    User.query.filter_by(username='admin').first()
    User.query.filter_by(id=1).first()

    模糊查詢

    User.query.filter(User.name.contains("name")).all()
    User.query.filter(User.name.like("%name%")).all()
    User.query.filter(User.name.like("%name%")).order_by(User.id.desc()).all()  # 倒敘
    User.query.filter(User.name.contains("name")).order_by(User.id).all()    # 正序

    多條件查詢

    User.query.filter( User.id.in_(id_list)).all()  # in
    User.query.filter(and_(User.name.like("user%"), User.fullname.like("first%"))).all())    #and 
    User.query.filter(or_(User.name.like("user%"), User.password != None)).all())  # or    

    其餘查詢

    from sqlalchemy import func, or_, not_
    
    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()
    
    query = session.query(User)
    print query # 顯示SQL 語句
    print query.statement # 同上
    for user in query: # 遍歷時查詢
        print user.name
    print query.all() # 返回的是一個類似列表的對象
    print query.first().name # 記錄不存在時,first() 會返回 None
    # print query.one().name # 不存在,或有多行記錄時會拋出異常
    print query.filter(User.id == 2).first().name
    print query.get(2).name # 以主鍵獲取,等效於上句
    print query.filter('id = 2').first().name # 支持字符串
    
    query2 = session.query(User.name)
    print query2.all() # 每行是個元組
    print query2.limit(1).all() # 最多返回 1 條記錄
    print query2.offset(1).all() # 從第 2 條記錄開始返回
    print query2.order_by(User.name).all()
    print query2.order_by('name').all()
    print query2.order_by(User.name.desc()).all()
    print query2.order_by('name desc').all()
    print session.query(User.id).order_by(User.name.desc(), User.id).all()
    
    print query2.filter(User.id == 1).scalar() # 如果有記錄,返回第一條記錄的第一個元素
    print session.query('id').select_from(User).filter('id = 1').scalar()
    print query2.filter(User.id > 1, User.name != 'a').scalar() # and
    query3 = query2.filter(User.id > 1) # 多次拼接的 filter 也是 and
    query3 = query3.filter(User.name != 'a')
    print query3.scalar()
    print query2.filter(or_(User.id == 1, User.id == 2)).all() # or
    print query2.filter(User.id.in_((1, 2))).all() # in
    
    query4 = session.query(User.id)
    print query4.filter(User.name == None).scalar()
    print query4.filter('name is null').scalar()
    print query4.filter(not_(User.name == None)).all() # not
    print query4.filter(User.name != None).all()
    
    print query4.count()
    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()
    
    query.filter(User.id == 1).update({User.name: 'c'})
    user = query.get(1)
    print user.name
    
    user.name = 'd'
    session.flush() # 寫數據庫,但並不提交
    print query.get(1).name
    
    session.delete(user)
    session.flush()
    print query.get(1)
    
    session.rollback()
    print query.get(1).name
    query.filter(User.id == 1).delete()
    session.commit()
    print query.get(1)
    --------------------- 
    作者:I天輝I 
    來源:CSDN 
    原文:https://blog.csdn.net/ialexanderi/article/details/78821437 
    版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

     

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