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的中間理解。謝謝你的回答,這至少意味着我的方法應該按我的意願工作,即使它比我想要的慢一點:) –