在 session.execute 在 python 中有 运行 之后获取插入行的主键

Get primary key of inserted row after session.execute has run in python

我有一个 MS SQL table 调用了具有以下结构的报告。我想获取刚刚插入的行的row_id:

r_id int NOT NULL IDENTITY,
report_type int,
report_source varchar,
received_date datetime,

我已经创建了一个引擎和 session_scope() 用于处理连接。我的代码如下所示:

with session_scope() as session:
    result_object = session.execute("""INSERT INTO reports (report_type, report_source, received_date) VALUES (3, 'Email', '24-06-2021 12:00')""")
    session.commit()
    for res in result_object:
        print "report id of inserted row is: ", res['r_id']

除此之外,我还尝试了 fetchone(),但我总是收到以下错误:

ResourceClosedError: This result object does not return rows. It has been closed automatically.

出于绝望,我也尝试在查询末尾添加“RETURNING *”,但我得到“ProgrammingError:'RETURNING' 附近的语法不正确。”获取报告 ID 的其他可靠方法是什么加载的行。 PS。我不想使用 ORM,我知道这可以在 ORM 中通过执行 session.add(object) 然后“object.r_id”轻松完成。当我使用查询时我们如何做?

也许您可以使用 OUTPUT (https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15)。假设您的 id 列是 report_id

"""INSERT INTO reports (report_type, report_source, received_date) 
OUTPUT Inserted.report_id 
VALUES (3, 'Email', '24-06-2021 12:00')"""