多表事务SQLAlchemy

时间:2017-08-18 09:19:18

标签: python sqlalchemy alembic

我正在尝试保存到两张桌子。假设我需要首先插入到tbl_1并使用生成的id插入到tbl_2然后在插入后我将调用commit命令。在我目前批准它像

WITH sample_data AS (SELECT 100 xyz FROM dual UNION ALL
                     SELECT 200 xyz FROM dual UNION ALL
                     SELECT 300 xyz FROM dual UNION ALL
                     SELECT 400 xyz FROM dual)
SELECT xyz,
       'x' "1", -- every number is divisible by 1
       CASE WHEN MOD(xyz, 2) = 0 THEN 'x' END "2",
       CASE WHEN MOD(xyz, 3) = 0 THEN 'x' END "2",
       CASE WHEN MOD(xyz, 4) = 0 THEN 'x' END "2",
       CASE WHEN MOD(xyz, 5) = 0 THEN 'x' END "2"
FROM   sample_data;

       XYZ 1 2 2 2 2
---------- - - - - -
       100 x x   x x
       200 x x   x x
       300 x x x x x
       400 x x   x x

这种方法的问题是如果tbl2.add失败我需要删除添加到tbl_1的内容。而且我不喜欢必须执行删除操作,因为我的表ID增量会很混乱。我在想的是这样的

tbl_1.add(data1)
tbl_1.commit()

-- Retrieve the ID from tbl_1
tbl2.add(tbl_1.id, data2)
tbl2.commit()

有关如何使用sqlalchemy实现此目的的任何想法?

*****编辑****** tbl_1和tbl2是sqlalchemy的相同会话对象。 我尝试将自动提交设置为True,它的工作原理是

tbl_1.add(data1)
tbl2.add(tbl_1.id, data2)
tbl2.commit()

将自动提交设置为True或False是否有任何问题?

0 个答案:

没有答案