2012-01-23 77 views

回答

11

SQLAlchemy核心不會抱怨缺少主鍵,因此可以使用Table(…)創建此類表。但是,按設計ORM需要一種方法來標識與對象相對應的行,因此無法在ORM中使用沒有主鍵的表。

爲什麼您需要稍後添加此索引?這是真正的要求還是試圖解決一些可能以其他方式解決的問題?如果您需要複合主鍵,可以使用幾個Column中的primary_key=True參數或__table_args__中的指定PrimaryKeyConstraint(…)來定義它。

+0

我打算創建一個多列索引。如果我可以明確聲明索引必須使用BTREE(我的數據庫是MySQL)來構造,那將是非常好的。任何解決方案 – Determinant

+1

大多數數據庫(包括MySQL)默認使用B-Tree,所以只需在所有參與組合索引的Column中指定'primary_key = True'。 'Index(...)'支持顯式B-Tree(或其他類型)規範,例如用於PostgreSQL,但不適用於MySQL,不適用於'PrimaryKeyConstraint'。看起來像SQLAlchemy中缺少的功能。 –

+6

您還可以將「primary_key」參數中的「primary」列的列表放到mapper()中,並聲明爲'__mapper_args__ = {「primary_key」:(col1,col2)}}' – zzzeek