0
我有一个程序在SQL数据库中插入一堆数据。数据由报告组成,每个具有多个标签。用pyodbc返回INSERT的主键
甲标签具有场REPORT_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
声明。
- 这不是说如果另一个进程在正确的时刻插入数据,那么语句会返回错误的主键?
- 我宁愿
INSERT report...
返回插入的主键,这是可能的吗?
由于我目前不得不在报告之间提交程序“暂停”在这些时刻。如果我能在最后完成所有事情,那么它将大大减少花费的时间。我一直在考虑在报告创建一个单独的字段用于识别,所以我可以report_id = (SELECT id FROM reports WHERE seperate_field=?)
或标签中的东西,但看起来不是很优雅。
噢好吧,我认为它返回了最后一个主键插入任何连接的地方 - 我只有对SQL的中间理解。谢谢你的回答,这至少意味着我的方法应该按我的意愿工作,即使它比我想要的慢一点:) –