使用SQLAlchemy的多列键

时间:2012-06-10 18:36:17

标签: python mysql sqlalchemy innodb

我有一个数据库表,其中包含复合主键(id_a, id_b)。这不是他们实际上所说的,但我正在简化这个问题。 id_a是外键,id_b只是一个整数,“序列号”可以这么说。我不能只使id_b auto_incrementing,因为它不允许InnoDB存储引擎(因为它不是复合键中的第一个字段)。

我想这样做,以便这些对象可以与id_a“分组”,例如:

id_a    id_b
----------------
1       1
1       2
2       1
2       2
2       3

并且使用(id_a=1)插入行的结果应自动设置id_b=3。我想避免使用数据库锁,特别是因为当完全允许使用不同id_a的并发插入时,不需要锁定整个表。

我通过SQLAlchemy(使用ORM)通过Python访问这个数据库,虽然我怀疑这个问题可以在客户端(纯MySQL)方面得到解决。

1 个答案:

答案 0 :(得分:1)

SELECT coalesce(max(ID_B),0)+1 FROM yourTable WHERE ID_A = '1'

但是,如果没有锁定,则存在获取重复ID_B值的风险,因此您必须处理insert语句上的重复键错误。代码中的“重试”会自动进行一定次数或错误,并强制用户再次尝试。