如何在批量插入中仅增加一次序列?

时间:2018-04-20 09:44:18

标签: python postgresql sqlalchemy

鉴于这样的模型:

class MyModel(Base):
    __tablename__ = 'my_model'
    id = Column(Integer, nullable=False, primary_key=True, index=True)
    value = Column(Numeric, doc='value')
    batch = Column(Integer, Sequence('my_model_batch_seq'), doc='Batch ID of the update')

我想发出一个批量插入,用于添加具有相同batch ID的所有新对象。下面的代码为每个对象增加,这不是我正在寻找的。

objects = [
    MyModel(
        value=x,
    ) for x in range(10)
]
db.bulk_save_objects(objects)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以先明确选择下一个值:

# Note that this may fail, if you haven't configured a bind on
# your Session.
batch = db.query(func.nextval('my_model_batch_seq')).scalar()

然后传递它:

objects = [
    MyModel(
        value=x,
        batch=batch,
    ) for x in range(10)
]
db.bulk_save_objects(objects)