使用sqlalchemy插入行后获取主键

mik*_*ail 17 python 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
Run Code Online (Sandbox Code Playgroud)

当我尝试插入主键时,我得到:
AttributeError:'MySQLExecutionContext_mysqldb'对象没有属性'inserted_primary_key',但是由于调试,topic_res是'ResultProxy'对象.
因此,如果我只插入一行,我可以获得topic_res.inserted_primary_key.

zzz*_*eek 18

inserted_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.returning()的单行insert()构造.

这是由于数据库客户端库中普遍存在的局限性,包括所有Python DBAPI,其中一次只剩下一个"最后插入的id"属性.

  • 据我所知,DBAPI 不支持这一点,而且 mysql 适配器似乎没有为此提供任何非标准 API。这是一个旧的答案,所以看看 http://docs.sqlalchemy.org/en/rel_0_9/faq.html#im-inserting-400-000-rows-with-the-orm-and-it-s-对于情况的概述真的很慢。 (2认同)