python - query - sqlalchemy select
Obtenga la clave principal después de insertar filas usando sqlalchemy (2)
Estoy insertando muchas filas con 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
cuando trato de insertar claves principales, y obtengo:
AttributeError: el objeto ''MySQLExecutionContext_mysqldb'' no tiene el atributo ''inserted_primary_key'', pero topic_res es el objeto ''ResultProxy'' debido a la depuración.
Entonces, si inserto solo una fila, puedo obtener topic_res.inserted_primary_key.
Tal vez su ResultsProxy es una lista o un objeto similar a una lista, por lo que debe iterar sobre los elementos = db-rows de ese objeto:
for e in topic_res:
print e.inserted_primary_key
EDITAR: el método "inserted_primary_key" parece funcionar solo para inserciones de una sola fila. Consulte http://docs.sqlalchemy.org/en/rel_0_6/core/connections.html#sqlalchemy.engine.base.ResultProxy.inserted_primary_key
el atributo inserted_primary_key solo funciona para una inserción de una sola fila:
Esto solo se aplica a construcciones de inserción de una sola fila () que no especifican explícitamente Insert.return ().
esto se debe a una limitación ampliamente prevalente en las bibliotecas de cliente de bases de datos, incluidas todas las DBAPI de Python, donde solo queda un atributo de "último identificador insertado" disponible a la vez.