18

我正在使用 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。

4

2 回答 2

19

insert_primary_key 属性仅对单行插入有效:

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

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

这是由于数据库客户端库中普遍存在的限制,包括所有 Python DBAPI,其中一次只留下一个“最后插入的 id”属性可用。

于 2012-09-08T01:17:44.297 回答
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

于 2012-09-05T14:06:09.683 回答