2012-09-05 13 views
14

ja wkładając wiele wierszy z SQLAlchemy:Uzyskaj klucz podstawowy po włożeniu wierszy przy użyciu 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 

gdy próbuję dostać wstawione klucze podstawowe, a ja otrzymuję:
AttributeError: obiekt „” ma MySQLExecutionContext_mysqldb brak atrybutu "inserted_primary_key", , ale topic_res to obiekt 'ResultProxy' z powodu debugowania.
Więc jeśli wstawię tylko jeden wiersz, mogę uzyskać topic_res.inserted_primary_key.

+0

Istnieją dobre odpowiedzi, proszę zgodzić się z każdym z nich. – I159

Odpowiedz

13

atrybut inserted_primary_key działa tylko na pojedynczym rzędzie wkładki:

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

This only applies to single row insert() constructs which did not explicitly specify Insert.returning().

to ze względu na szeroko rozpowszechnione ograniczenia w bibliotekach klienta bazy danych w tym wszystkie Python DBAPIs gdzie tylko jeden atrybut "ostatnio wstawiony identyfikator" jest dostępny od razu.

+0

Tak więc dla MySQL nie ma sposobu, aby zrobić wiele wstawić i uzyskać listę wszystkich wstawionych identyfikatorów w jednym wywołaniu? Widzę różnicę wydajności 25x podczas wstawiania wszystkich na raz, zamiast pętli nad każdym i odzyskiwania the inserted_primary_key. – Zitrax

+1

Nie wiem, DBAPI nie obsługuje tego, a adaptery mysql nie wydają się oferować niestandardowych interfejsów API dla tego. to stara odpowiedź, więc spójrz na http://docs.sqlalchemy.org/en/rel_0_9/faq.html#im-inserting-400-000-rows-with-the-orm-and-it-s- bardzo powolny, aby zobaczyć sytuację. – zzzeek

Powiązane problemy