我正在使用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。
答案 0 :(得分:17)
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