Получить первичный ключ после вставки строк с использованием sqlalchemy

Я вставляю много строк с sqlalchemy:

connection = engine.connect() topic_res = connection.execute(message_topics.insert(),[ { 'mt_date': time.time(), 'mt_title': title, 'mt_hasattach':u'0', 'mt_starter_id':member.member_id, 'mt_start_time': time.time(), 'mt_last_post_time': time.time(), 'mt_invited_members': u'a:0:{}', 'mt_to_count': u'1', 'mt_to_member_id':member.member_id, 'mt_replies': u'1', } for member in members ]) topic_res.inserted_primary_key 

когда я пытаюсь получить вставленные первичные ключи, и я получаю:
AttributeError: объект 'MySQLExecutionContext_mysqldb' не имеет атрибута 'insert_primary_key', но topic_res – это объект ResultProxy из-за отладки.
Поэтому, если я вставляю только одну строку, я могу получить topic_res.inserted_primary_key.

2 Solutions collect form web for “Получить первичный ключ после вставки строк с использованием sqlalchemy”

атрибут insert_primary_key работает только для однострочной вставки:

http://docs.sqlalchemy.org/en/rel_0_7/core/connections.html?highlight=inserted_primary_key#sqlalchemy.engine.base.ResultProxy.inserted_primary_key

Это относится только к строковым конструкциям insert (), которые явно не указали Insert.returning ().

это связано с широко распространенным ограничением в клиентских библиотеках баз данных, включая все PAPI-файлы DBAPI, где одновременно доступен только один атрибут «последний вставленный идентификатор».

Возможно, ваш ProjectProxy – это список или объект, похожий на список, поэтому вы должны перебирать элементы = db-rows этого объекта:

 for e in topic_res: print e.inserted_primary_key 

EDIT: метод «insert_primary_key» работает только для однострочных вставок. См. http://docs.sqlalchemy.org/en/rel_0_6/core/connections.html#sqlalchemy.engine.base.ResultProxy.inserted_primary_key

  • Избегание «сервера MySQL ушло» на редко используемом сервере Python / Flask с SQLAlchemy
  • Могу ли я создать временную таблицу в SQLAlchemy без добавления в Table._prefixes?
  • множественные / разделенные ассоциации классов в sqlalchemy
  • Sqlalchemy удалить подзапрос
  • Sqlalchemy присоединиться к одному из многих отношений?
  • sqlalchemy простой пример `sum`,` average`, `min`,` max`
  • Использование поля Integer SQLAlchemy для создания объекта timedelta для сравнения
  • одно поле с различными типами данных
  • Python - лучший язык программирования в мире.