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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37392631/article/details/84957390

集成 

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 
    版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/m0_37392631/article/details/84957390
今日推荐