目标是这样的:我有一组值要放入表中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
,使用外键而不是对列表对象的引用。