使用pyodb在插入时返回主键

2024-03-29 13:27:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序在一个SQL数据库中插入一堆数据。数据由报告组成,每个报告都有许多标记。在

一个标签有一个字段报告id,它是对相关报告主键的引用。在

现在,每次插入数据时,可能有200个报告甚至更多,每个报告可能有400个标记。所以在伪代码中我要做的是:

for report in reports:
    cursor_report = sql('INSERT report...')
    cursor_report.commit()
    report_id = sql('SELECT @@IDENTITY')

    for tag in report:
        cursor_tag += sql('INSERT tag, report_id=report_id')
    cursor_tag.commit()

我不喜欢这样有几个原因。通常我不喜欢SELECT @@IDENTITY语句。在

  1. 这难道不意味着如果另一个进程在正确的时候插入数据,那么语句将返回错误的主键吗?在
  2. 我希望INSERT report...返回插入的主键,这可能吗?在

由于我现在必须在报告之间提交,所以程序在这些时刻“暂停”。如果我能在最后完成所有的事情,那将大大减少花费的时间。我一直在考虑在Report中创建一个单独的字段用于标识,这样我就可以report_id = (SELECT id FROM reports WHERE seperate_field=?)或在标记中创建一些东西,但这似乎不太优雅。在


Tags: 数据in标记程序reportidforsql
1条回答
网友
1楼 · 发布于 2024-03-29 13:27:32

Wouldn't this mean that if another process were inserting data at the right moment then the ["SELECT @@IDENTITY"] statement would return the wrong primary key?

不需要。数据库引擎跟踪每个连接的最后一个identity值,并为执行SELECT @@IDENTITY语句的连接返回相应的值。在

相关问题 更多 >