Оператор вставки, взятый дословно из Руководство по ядру SQLAlchemy завершается неудачно при использовании с Oracle 11:
class OrmT(Base):
__tablename__ = 'table1'
cc = Column(String(6), primary_key=True)
sector = Column(String(60))
t = OrmT.__table__
t.create(engine)
sel = select([t.c.cc, t.c.sector])
ins = t.insert().from_select(['cc', 'sector'], sel)
engine.execute(ins)
engine.commit()
Сообщение об ошибке выглядит следующим образом:
DatabaseError: (DatabaseError) ORA-00933: Команда SQL неправильно завершена
'INSERT INTO table1 (cc, sector) SELECT table1.cc,
table1.sector \nFROM table1 RETURNING table1.cc INTO :ret_0' {'ret_0':
<cx_Oracle.STRING with value None>}
Как настроить SQLAlchemy для ее исправления?Спасибо!
Обновление:
ins = t.insert(inline=True).from_select(['cc', 'sector'], sel)
устраняет проблему, отключив захват первичного ключа.Это далеко не идеальное решение, особенно когда нужны первичные ключи.