sqlalchemy使用

这篇博客探讨了如何使用SQLAlchemy进行复杂查询,包括简单查询、子查询和左外连接。示例展示了如何结合函数cast和ceil对日期和时间进行转换,并通过and_进行条件过滤,最后实现不同表之间的数据关联。内容适合熟悉SQLAlchemy的Python开发者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 
from sqlalchemy import cast, Date, TIMESTAMP, DateTime, String, BIGINT, func, and_

简单查询+子连接+函数:

dag_infos1 = session.query(DcmpLineage.dag_name.label('dag_name'), DcmpLineage.task_name.label('task_name'),
						   DcmpLineage.task_type,
						   DcmpLineage.task_dc.label('task_dc'),
						   DcmpLineage.owner.label('owner'),
						   TaskInstance.state,
						   func.cast(TaskInstance.start_date, String).label('start_date'),
						   func.cast(TaskInstance.execution_date, BIGINT).label('execution_date'),
						   func.ceil(TaskInstance.duration / 60).label('duration'), DcmpLineage.upstreams,
						   DcmpLineage.data_in, DcmpLineage.data_out) \
	.filter(DcmpLineage.dag_name == target_dag_name, DcmpLineage.dag_name == TaskInstance.dag_id,
			TaskInstance.task_id == func.concat_ws("_", DcmpLineage.task_name, DcmpLineage.task_dc)
			, DcmpLineage.owner == "{}".format(owner)) \
	.subquery('t1')

左外连接:
dag_infos = session.query(dag_infos2, dag_infos1).outerjoin(
	dag_infos1,
	and_(
		dag_infos1.c.dag_name == dag_infos2.c.dag_name,
		dag_infos1.c.task_dc == dag_infos2.c.task_dc,
		dag_infos1.c.task_name == dag_infos2.c.task_name,
		dag_infos1.c.execution_date == dag_infos2.c.execution_date
	)
)

 

SQLAlchemy是一个强大的Python ORM (Object-Relational Mapping) 库,它允许开发者以面向对象的方式来操作数据库。以下是使用SQLAlchemy的基本步骤: 1. **安装**: 首先需要通过pip安装SQLAlchemy库: ```bash pip install sqlalchemy ``` 2. **导入模块**: 导入sqlalchemy核心组件和你需要的具体数据库驱动,例如对于SQLite: ```python from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base ``` 3. **创建引擎**: 根据你的数据库配置创建数据库引擎,例如连接SQLite文件: ```python engine = create_engine('sqlite:///example.db') ``` 4. **定义模型** (Declarative Base): SQLAlchemy使用Declarative Base来简化表结构定义,它是元类,用于生成对应数据库表的类。 ```python Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) ``` 5. **映射数据到表**: 使用`Base.metadata.create_all(engine)`将定义的模型映射到数据库表上(如果表不存在的话)。 6. **查询数据**: 可以直接使用类名作为查询对象,例如获取所有用户: ```python users = User.query.all() ``` 7. **添加、更新和删除数据**: 对于增删改查操作,可以使用实例化对象并调用其对应的保存方法: ```python new_user = User(name='Alice') new_user.save() # 对应于INSERT INTO user = User.query.get(1) user.name = 'Bob' user.update() # 对应于UPDATE user.delete() # 对应于DELETE FROM ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值