SQL炼金术和金字塔能处理日期生效的场景吗

2024-10-01 11:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个能够处理以下场景的web框架(希望是基于Python、Postgresql和ORM):

你有一个人表(有一个人艾薇儿·拉维尼——有过两次婚姻):

PersonID Start       End         PersonName
-------- ----------- ----------- -------------
1        27-Sep-1984 14-Jul-2006 Avril Lavigne
1        15-Jul-2006 30-Jun-2013 Avril Whibley
1        01-Jul-2013 31-Dec-9999 Avril Kroeger

您有一个分配表(即一个人持有的工作分配等,其中一个人可以在不同的位置持有多个):

^{pr2}$

Pyramid是否有一种方法可以让用户选择一个生效日期(比如说今天),SQL Alchemy能够使用生效日期和SQL between和{}上的外键联接来联接表,以恢复:

Avril Kroeger有两个任务,分别是JobID1和2和LocID3。在

Oracle中的SQL语句应该是:

select p.PersonName, 
       a.JobID,
       a.LocID
from   Person p,
       Assignment a
where  a.PersonID = p.PersonID
and    trunc(sysdate) between a.Start and a.End
and    trunc(sysdate) between p.Start and p.End

我只是担心我将要学习另一个不能处理复合主键的web框架和上面的场景,甚至SQL外键也无法处理。在

所以ORM基本上可以处理任意查询吗?如果使用上述场景,是否会丢失所有ORM速记函数?有没有更好的方法来处理上述情况。是否应该将生效日期存储为会话变量?在

我对这个话题了解不够,无法提供我的解决方案。我更努力避免学习另一个不能解决上述问题的框架。在


Tags: and框架websqlorm场景betweenstart
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:34

首先,Pyramid完全可以处理这种情况,因为Pyramid是存储无关的,所以它对数据库、SQL等都一无所知:)换句话说,这个问题与Pyramid没有任何关系。在

其次,SQLAlchemy确实支持复合主键。从我的头顶看,声明类应该是这样的:

class Person(sa.Base):
    person_id = sa.Column(sa.Integer, primary_key=True)
    start = sa.Column(sa.DateTime, primary_key=True)
    end = sa.Column(sa.DateTime, primary_key=True)
    name = sa.Column(sa.String)

class Assignment(sa.Base):
    person_id = sa.Column(sa.Integer, primary_key=True)
    start = sa.Column(sa.DateTime, primary_key=True)
    end = sa.Column(sa.DateTime, primary_key=True)
    ...

你的查询应该是这样的:

^{pr2}$

相关问题 更多 >