在SQLAlchemy中选择行,进行更改并更新数据库

时间:2015-01-13 11:31:32

标签: python sqlalchemy

假设我的表只有两列:

  • ID
  • step_id的数据类型
  • 起始日期

我想选择step_id == 2的行,并将start_date(当前为NULL)更新为当前时间。目前,我正在这样做:

engine = create_engine('postgresql://postgres:postgres@localhost/quantdb')
metadata = MetaData(bind=engine)
step_instance = Table('step_instance', metadata, autoload=True)

s = step_instance.select().where(step_instance.c.step_id == 2)
res = engine.execute(s)

for row in res:
    start_date_stmt = step_instance.update().where(step_instance.c.id == row.id).\
        values(start_date=datetime.now(pytz.utc))

    engine.execute(start_date_stmt)

这感觉相当笨拙,有更好的方法吗?我正在思考如何直接修改row中的字段,然后更新"具有此修改后的row

的数据库

这可能吗?也很高兴听到其他更好的方式。

1 个答案:

答案 0 :(得分:0)

是的,你可以。查找会话。我没有测试过以下示例,但它可以让您了解该怎么做。

...
db_session = scoped_session(sessionmaker(bind=engine))
res = db_session.query(step_instance).filter(step_instance.c.step_id == 2)
for row in res:
    row.start_date = datetime.now(pytz.utc)
db_session.commit()