SQLALchemy - 列表属性(或有问题的?FK表)

时间:2016-10-01 23:19:39

标签: python sqlalchemy

我的数据Feed如下所示:

{['item_id': 1, ... 'price': 123, ... ],
 ['item_id': 1, ... 'price': 124, ... modifiers: [1, 2, 3],
 ['item_id': 1, ... 'price': 125, ... modifiers: [100, 150, 500 ... ],
 ['item_id': 2, ... 'price': 200, ...],
 ...}

基本上可以修改一些item - 可以将它想象成可以用额外的东西(例如AC,电子窗等)修改的汽车,但也可以单独出售,他们的价格在拍卖中。

我的(当前)item课程如下所示:

class Item(Base):
    __tablename__ = 'items'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    price = Column(Integer)

我不确定如何捕获那里的modifiers。我知道我可以创建一个Modifier例如:

class Modifier(Base):
    __tablename__ = 'modifiers'

    id = Column(Integer, primary_key=True)

但是我如何实现以下目标:

1)表格必须是多对多关系,因为任何修饰符都可以应用于任何项目,任何项目都可以有多个修饰符。

2)更重要的是 - 我需要有效地区分['item_id': 1, ... ]['item_id': 1, ... , modifiers: [1, 2, 3](我可能每天扫描数亿个此类项目)。

*最终目标*:

保持每个项目(基本项目和修改组合)的价格直方图'去'。这不是一个简单的“基本项目价格”+“每个修饰符的价格”,因为例如某些项目不再生产,但基础项目的价值将高于修改项目的价值。因此,我需要快速确定哪个项目&我们正在讨论修饰符组合,并为其分配当前价格。

*结束目标2 *:

了解商品的平均价格,能够有效地确定是否值得购买。通过有效,我的意思是真正有效,因为正如我所说,它可能每天有数亿次不同​​的拍卖,所以做一些事情是不可行的:

buy_list = []

for a in auctions:
    item_id = a['item_id'] #not good. this doesn't include modifiers
    price = a['price']

    #way too slow I think. If 10^8 auctions, would create a 10^8 calls to db.
    buy_price = some_query(item_id) 

    if buy_price < price:
        buy_list.append(a)

0 个答案:

没有答案