Цель такова: у меня есть набор значений для таблицы A
и набор значений для таблицы B
. Значения, входящие в B
, ссылаются на значения в A
(через внешний ключ), поэтому после вставки значений A
мне нужно знать, как ссылаться на них при вставке значений B
. Мне нужно, чтобы это было как можно быстрее.
Я сделал вставку значений B
с массовой копией из:
def bulk_insert_copyfrom(cursor, table_name, field_names, values):
if not values: return
print "bulk copy from prepare..."
str_vals = "\n".join("\t".join(adapt(val).getquoted() for val in cur_vals) for cur_vals in values)
strf = StringIO(str_vals)
print "bulk copy from execute..."
cursor.copy_from(strf, table_name, columns=tuple(field_names))
Это было намного быстрее, чем выполнение запроса INSERT VALUES ... RETURNING id
. Я хотел бы сделать то же самое для значений A
, но мне нужно знать id
вставленных строк.
Есть ли способ выполнить массовое копирование таким образом, но получить поле id
(первичный ключ) вставленных строк, чтобы я знал, какой id
связан с каким value
?
Если нет, то какой лучший способ достичь моей цели?
РЕДАКТИРОВАТЬ: Пример данных по запросу:
a_val1 = [1, 2, 3]
a_val2 = [4, 5, 6]
a_vals = [a_val1, a_val2]
b_val1 = [a_val2, 5, 6, 7]
b_val2 = [a_val1, 100, 200, 300]
b_val3 = [a_val2, 9, 14, 6]
b_vals = [b_val1, b_val2, b_val3]
Я хочу вставить a_vals
, затем вставить b_vals
, используя внешние ключи вместо ссылок на объекты списка.