python怎样进行主键合并_python – 在SQLAlchemy中,如何查询复合主键?

博客讨论了在 SQLAlchemy 中如何使用 `where` 子句结合 `listcomprehension` 过滤数据。提到了将日期列与字符串比较的问题,并建议使用 `datetime` 对象。还提出了构建基础语句并逐步添加子句以提高代码可读性的方法。同时,对于大量过滤条件,创建临时表可能更为高效。
摘要由CSDN通过智能技术生成

在where子句中使用list comprehension:

from sqlalchemy import and_,or_,select

stmt = select(

[example.c.id,example.c.data]

).where(or_(and_(example.c.id==data[0],example.c.date==data[1])

for data in interesting_data))

但是,我注意到的另一个问题是您将日期列与字符串数据类型进行比较. interesting_data列表应该是

import datetime as dt

interesting_data = (

(1,dt.date(2016,5,1)),6,)

另请注意,可以创建基本语句,然后逐步向其添加子句,从而导致(希望)更好的易读性和代码重用.

因此,可以将上面的内容写成

base_stmt = select([example.c.id,example.c.data])

wheres = or_(and_(example.c.id==data[0],example.c.date==data[1])

for data in interesting_data))

stmt = base_stmt.where(wheres)

这会生成以下sql(由我添加的新行和空格):

SELECT example.id,example.date,example.data

FROM example

WHERE

example.id = :id_1 AND example.date = :date_1

OR example.id = :id_2 AND example.date = :date_2

OR example.id = :id_3 AND example.date = :date_3

OR example.id = :id_4 AND example.date = :date_4

OR example.id = :id_5 AND example.date = :date_5

注意:如果要像这样过滤很多行,那么创建临时表,从interesting_data向此临时表插入行,然后将内部连接插入此表可能更有效,而不是如图所示添加where子句以上.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值