使用sqlalchemy插入行后获取主键

时间:2012-09-05 13:26:48

标签: 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

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

2 个答案:

答案 0 :(得分:17)

inserted_primary_key属性仅适用于单行插入:

https://docs.sqlalchemy.org/en/latest/core/connections.html#sqlalchemy.engine.ResultProxy.inserted_primary_key

  

这仅适用于没有的单行insert()结构   明确指定Insert.returning()。

这是由于数据库客户端库中普遍存在的局限性,包括所有Python DBAPI,其中一次只剩下一个“last inserted id”属性。

答案 1 :(得分:1)

也许你的ResultsProxy是一个列表或类似列表的对象,所以你应该迭代该对象的elements = db-rows:

for e in topic_res:
    print e.inserted_primary_key

编辑:方法“inserted_primary_key”似乎只适用于单行插入。见http://docs.sqlalchemy.org/en/rel_0_6/core/connections.html#sqlalchemy.engine.base.ResultProxy.inserted_primary_key

相关问题