Sqlalchemy 查询,修改,删除

摘要:sqlalchemy操作

SQLALchemy_badiu_30394251的博客-CSDN博客SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作 ,也就是将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。安装:pip3installsqlalchemy组成部分:Engine,框架的引擎Connection Pooling ,数据库连接池Dialect,选择连接数据...https://blog.csdn.net/weixin_30394251/article/details/96772056

1.查询

  • 别名查询(label标签)
  • filter与filter_by
  • 子查询(params与from_statument)
  • 连表查询(左连接:isouter=True,或 outerjoin)
  • relationship查询与relationship反向查询
import models

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine,text

# 连接数据库
engine=create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/s8sql?charset=utf8")
Session=sessionmaker(bind=engine)
# 每次执行数据库操作时,都需要创建一个session
session=Session()

# 查全部数据
class_list=session.query(models.Classes).all()
for classes in class_list:
    print(classes.id,classes.name)

#别名查询
class_list=session.query(models.Classes.id,models.Classes.name.label("xx")).all()
for classes in class_list:
    print(classes.id,classes.xx)

#条件查询  filter(条件)  filter_by()
obj=session.query(models.Classes).filter(models.Classes.name=="全栈9期").all()
for i in obj:
   print(i.name)
obj1=session.query(models.Classes).filter(models.Classes.name=="全栈9期").first()
print(obj1.name)
obj2=session.query(models.Classes).filter_by(name="全栈10期").first()
print(obj2.name)

#子查询
result = session.query(models.Classes).from_statement(text("SELECT * FROM classes where name=:name")).params(name='全栈11期').all()
print(result)
ret =session.query(models.Classes).filter(models.Classes.id.in_(session.query(models.Classes.id).filter_by(name='全栈8期'))).all()
print(ret)

# 显示所有学生信息(含班级)
# 1、多次查询
obj=session.query(models.Student).all()
for obj in objs:
   cls_obj = session.query(models.Classes).filter(models.Classes.id==obj.class_id).first()
print(obj.id,obj.username,obj.class_id,cls_obj.name)

# 2、连表查询   isouter=True mysql中leftjoin查询
objs = session.query(models.Student.id,models.Student.user,models.Classes.name).join(models.Classes,isouter=True).all()
print(objs)

# 左连接
objs=session.query(models.Student.id,models.Student.user,models.Classes.name).outerjoin(models.Classes, models.Student.c_id == models.Classes.id).all()
print(objs)


# 3、使用relationship查询
objs = session.query(models.Student).all()
for item in objs:
    print(item.id,item.user,item.class_id,item.cls.name)

#4、使用relationship反向查询    全栈9期所有的学生
obj = session.query(models.Classes).filter(models.Classes.name=='全栈9期').first()
student_list = obj.stus
for item in student_list:
    print(item.id,item.user)
# 提交事务
session.commit()
# 关闭session
session.close()
 

2.修改

  • 字符串拼接
  • 数值计算

import models

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

# 连接数据库
engine=create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/s8sql?charset=utf8")
Session=sessionmaker(bind=engine)
# 每次执行数据库操作时,都需要创建一个session
session=Session()

# 改
# session.query(models.Classes).filter(models.Classes.id > 1).update({"name" : "099"})

# synchronize_session=False  字符串拼接
# session.query(models.Classes).filter(models.Classes.id > 0).update({models.Classes.name: models.Classes.name + "099"}, synchronize_session=False)

# synchronize_session="evaluate"  数字计算
session.query(models.Classes).filter(models.Classes.id > 0).update({"age": models.Classes.age + 1}, synchronize_session="evaluate")

# 提交事务
session.commit()
# 关闭session
session.close()
 

3.删除

# 删除

import models

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine

# 连接数据库
engine=create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/s8sql?charset=utf8")
Session=sessionmaker(bind=engine)
# 每次执行数据库操作时,都需要创建一个session
session=Session()

# 删
session.query(models.Classes).filter(models.Classes.id > 2).delete()


# 提交事务
session.commit()
# 关闭session
session.close()

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值