Database design SQLAlchemy声明性:没有任何主键的表?

Database design SQLAlchemy声明性:没有任何主键的表?,database-design,orm,sqlalchemy,schema,Database Design,Orm,Sqlalchemy,Schema,如何使用没有主键的ORM声明性类创建表? 如果我没有将任何列设置为primary\u key=TrueSQLAlchemy-core不会抱怨缺少主键,因此可以使用表(…)创建这样的表。但ORM在设计上需要一种方法来标识对应于对象的行,所以在ORM中不可能使用没有主键的表 为什么以后需要添加此索引?它是真正的需求还是试图解决一些可能通过其他方式解决的问题?如果您需要复合主键,可以在几个列中使用primary\u key=True参数来定义它,或者在\u table\u args\u中指定Prima

如何使用没有主键的ORM声明性类创建表?
如果我没有将任何列设置为
primary\u key=True

SQLAlchemy-core不会抱怨缺少主键,因此可以使用
表(…)
创建这样的表。但ORM在设计上需要一种方法来标识对应于对象的行,所以在ORM中不可能使用没有主键的表


为什么以后需要添加此索引?它是真正的需求还是试图解决一些可能通过其他方式解决的问题?如果您需要复合主键,可以在几个
列中使用
primary\u key=True
参数来定义它,或者在
\u table\u args\u
中指定
PrimaryKeyConstraint(…)
来定义它。请问,您为什么要这样做?@JonathanOng,因为我想稍后添加一些索引,看起来mysql可以做这样的事情。我打算创建一个多列索引。如果我能明确声明索引必须使用BTREE(我的数据库是MySQL)构建,那就太好了。有什么解决方案吗?大多数数据库(包括MySQL)默认使用B树,所以只需在参与复合索引的所有
列中指定
primary\u key=True
索引(…)
中支持显式B树(或其他类型)规范,例如PostgreSQL,但MySQL和
PrimaryKeyConstraint中不支持显式B树规范。SQLAlchemy中似乎缺少功能。您还可以将“primary_key”参数中的“primary”列列表放入mapper(),使用声明性的
\uuuu mapper_args_uuu={“primary_key”:(col1,col2)}
@zzzeek可能是您提供的代码有问题,它没有添加任何主多列键。怎么了?
\uuu映射器\u args\uu
只将这些列映射为主列,它不会发出CREATETABLE语句。否则,请使用特定的代码示例和无法正常工作的内容更新此处。