"创建索引"返回"回滚"交易

时间:2015-05-19 09:25:04

标签: python postgresql sqlalchemy jsonb

SqlAlchemy会话定义为:

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

并配置:

DBSession.configure(bind=engine)
Base.metadata.bind = engine

需要使用execute raw sql to transaction:

为jsonb字段创建索引
with transaction.manager:
    sql = "CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));"
    DBSession.execute(sql)

操作的SqlAlchemy日志如下所示:

BEGIN (implicit)
INFO CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
INFO  {}
INFO  ROLLBACK

并未创建索引。

psql中的相同SQL命令会创建索引而不会出现错误:

=> CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
=> CREATE INDEX

如何使用SqlAlchemy创建索引"执行"在这种情况下命令?

1 个答案:

答案 0 :(得分:0)

找到一个" hard"解。如果不使用事务和会话机制就这样做:

DBSession.bind.engine.execute(sql)

和SqlAlchemy日志:

INFO CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
INFO {}
INFO COMMIT

并将索引创建到数据库中 - 我已使用psql检查。