SQLAlchemy 基本使用 单表 一对多表 多对多表 数据库连接方方式(多线程)原生sql

SQLAlchemy 基本使用 单表 一对多表 多对多表 数据库连接方方式(多线程)原生sql

原文更精彩:https://www.cnblogs.com/lovershowtime/p/11756891.html

SQLAlchemy 使用单表常用操作

# ======================增=============================
# # 单条数据
obj=Users(name="张三")
session.add(obj)
session.commit()


# 多条数据
session.add_all([
          Users(name="张里"),
          Users(name="马上")
])
session.commit()


# ======================查=============================
# for集合查询
aa=session.query(Users).all()
for row in  aa:
    print(row.name,row.id)

# # 条件查询
bb=session.query(Users).filter(Users.id>=3)
for roe in  bb:
    print(roe.name)

# # 条件查询
res=session.query(Users).filter(Users.id>=2).first()
print(res)


# ======================删=============================
session.query(Users).filter(Users.id>2).delete()
session.commit()

# ======================改=============================
session.query(Users).filter(Users.id==1).update({Users.name:"哈哈哈哈"})
session.query(Users).filter(Users.id==2).update({"name":"哈哈哈哈哈哈哈哈哈哈企鹅恶趣味去"})
session.query(Users).filter(Users.id == 4).update({'name':Users.name+"DSB"},synchronize_session=False)  # 在原来的数据上进行追加
session.commit()

# ======================其他常用=============================

# 1. 指定列
select id,name as cname from users;
result = session.query(Users.id,Users.name.label('cname')).all()
for item in result:
        print(item,item.id,item.cname)

aa=session.query(Users.id,Users.name.label('cname'))
print(aa) 查看sql语句



# 2. 默认条件and
aa=session.query(Users).filter(Users.id > 1, Users.name == '李四').all()
for i in aa:
    print(i.name)



# 3. between  在什么之间
aa=session.query(Users).filter(Users.id.between(4, 7), Users.name == '李四').all()
for i in aa:
    print(i.name)




#  in  包含
aa=session.query(Users).filter(Users.id.in_([1,5,2])).all() #在这个范围内 查询的结构顺序会乱
for i in aa:
    print(i.name)

print("--------------------------")
cc=session.query(Users).filter(~Users.id.in_([1,3,4])).all()  # ~不在这个范围内
for i in cc:
    print(i.name)

# 5. 子查询
aa=session.query(Users).filter(Users.id.in_(session.query(Users.id).filter(Users.name=='李四'))).all()
for i in  aa:
    print(i.name)

# 6. and 和 or
from sqlalchemy import and_, or_

aa=session.query(Users).filter(Users.id > 3, Users.name == '李四').all()      # 默认就是and
for i in aa:
    print(i.name)

bb=session.query(Users).filter(and_(Users.id > 3, Users.name == '马上')).all()     #and  #id大于3 并且name=马上
for i in bb:
    print(i.name)

cc=session.query(Users).filter(or_(Users.id < 2, Users.name == '黄色')).all()                             #  or_(Users.id < 2, Users.name == '黄色')表示id小于2 或者name等于黄色
for i in cc:
    print(i.name)

dd=session.query(Users).filter(
    or_(
        Users.id < 2,
        and_(Users.name == 'eric', Users.id > 3),
        Users.extra != ""
    )).all()

for i in dd:
    print(i.name)




# 7. filter_by
aa=session.query(Users).filter_by(name='李四').all()
print(aa)
for i in aa:
    print(i.name)


# 8. 通配符
ret1 = session.query(Users).filter(Users.name.like('李%')).all()
for i in ret1:
    print(i.name)

ret = session.query(Users).filter(~Users.name.like('黄%')).all()
for i in ret:
    print(i.name)


# 9. 切片
result = session.query(Users)[1:3]   切片 (限制/分页)
print(result)
for i in result:
    print(i.name)


# 10.排序
ret1 = session.query(Users).order_by(Users.name.desc()).all()   #升序
for i in ret1:
    print(i.name)
print("-----------------")
ret2= session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()  # 降序
for i in ret2:
    print(i.name)


# 11. group by
from sqlalchemy.sql import func   # 导入 func,func 中有聚合函数

ret = session.query(
        Users.dep_id,
        func.count(Users.id),
).group_by(Users.dep_id).all()
for item in ret:
        print(item)       # group_by(字段)之后不要 query() 所有字段

print("-----------------------------------------------------")
ret = session.query(
        Users.dep_id,
        func.count(Users.id),
).group_by(Users.dep_id).having(func.count(Users.id) >=2).all() 根据 name 分组,func.count(Users.id) > 2 ;根据聚合函数进行二次筛选:having
for item in ret:
        print(item)




# 12.union 和 union all            组合(垂直/上下连表):union 和 union all --- union all 去重,union 不去重
# Union All:对两个结果集进行并集操作,包括重复行,不进行排序
# Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

# 有关union和union all关键字需要注意的问题是:
# union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。
# 使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需
#  union 和 union_all 的区别
#        union 去重
#         union_all 不去重
# 相同点:合并的两张表的列要相同
"""
select id,name from users
UNION
select id,name from users;
"""
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union(q2).all()
print(ret)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值