gpt4 book ai didi

python - 使用 sqlalchemy 的声明性 ORM 扩展时的多列索引

转载 作者:IT老高 更新时间:2023-10-28 21:32:04 27 4
gpt4 key购买 nike

根据the documentation以及 sqlalchemy.Column 类中的注释,我们应该使用类 sqlalchemy.schema.Index 来指定包含多个列的索引。

但是,该示例显示了如何通过直接使用 Table 对象来执行此操作,如下所示:

meta = MetaData()
mytable = Table('mytable', meta,
# an indexed column, with index "ix_mytable_col1"
Column('col1', Integer, index=True),

# a uniquely indexed column with index "ix_mytable_col2"
Column('col2', Integer, index=True, unique=True),

Column('col3', Integer),
Column('col4', Integer),

Column('col5', Integer),
Column('col6', Integer),
)

# place an index on col3, col4
Index('idx_col34', mytable.c.col3, mytable.c.col4)

如果我们使用声明式ORM扩展应该怎么做?

class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, , primary_key=True)
a = Column(String(32))
b = Column(String(32))

我想要列“a”和“b”的索引。

最佳答案

那些只是 Column 对象,index=True 标志正常工作:

class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32), index=True)
b = Column(String(32), index=True)

如果你想要一个复合索引,Table 再次像往常一样出现在这里,你不必声明它,一切都一样(确保你在最近的 0.6 或0.7 用于声明性 A.a 包装器在类声明完成后被解释为 Column):

class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32))
b = Column(String(32))

Index('my_index', A.a, A.b)

在 0.7 中,Index 也可以在 Table 参数中,声明式是通过 __table_args__:

class A(Base):
__tablename__ = 'table_A'
id = Column(Integer, primary_key=True)
a = Column(String(32))
b = Column(String(32))
__table_args__ = (Index('my_index', "a", "b"), )

关于python - 使用 sqlalchemy 的声明性 ORM 扩展时的多列索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6626810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com