带SQLAlchemy的多列键

2024-04-26 13:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库表,它有一个复合主键(id_a, id_b)。这不是他们的实际名称,但我简化了这个问题。id_a是一个外键,id_b只是一个整数,可以说是“序列号”。我不能让id_b自动递增,因为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的并发插入时,不需要锁定整个表。在

我通过Python通过SQLAlchemy(使用ORM)访问这个数据库,尽管我怀疑这个问题在客户端(纯MySQL)方面可以得到不可知的答案。在


Tags: 对象答案引擎名称id数据库客户端sqlalchemy
1条回答
网友
1楼 · 发布于 2024-04-26 13:27:23

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

但是,如果没有锁定,就有可能获得重复的ID_B值,因此必须处理insert语句上的重复键错误。要么在代码中自动“重试”一段时间,要么出错并强制用户再试一次。在

相关问题 更多 >