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创建索引"执行"在这种情况下命令?
答案 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
检查。