python - 创建表后向 SQLAlchemy 模型添加索引

标签 python indexing sqlalchemy

我有一个 flask sqlalchemy 模型:

class MyModel(db.Model):
__tablename__ = 'targets'
id = db.Column(db.Integer, primary_key=True)
url = db.Column(db.String(2048))

该表已创建并正在使用中。我想在 url 属性上创建一个索引,所以我将 index=True 传递给它:

url = db.Column(db.String(2048), index=True)

如何在不删除重新创建表的情况下让这个索引生效?

最佳答案

给定原始问题中的模型类。

class MyModel(db.Model):
    __tablename__ = 'targets'
    id = db.Column(db.Integer, primary_key=True)
    url = db.Column(db.String(2048))

您不能只添加 index=True,因为即使您调用了 db.Model.metadata.create_all(),也不会在已创建的表上创建索引。

相反,您需要创建一个独立的 Index 对象,然后再创建它。它看起来像这样:

class MyModel(db.Model):
    __tablename__ = 'targets'
    id = db.Column(db.Integer, primary_key=True)
    url = db.Column(db.String(2048))

mymodel_url_index = Index('mymodel_url_idx', MyModel.url)

if __name__ == '__main__':
    mymodel_url_index.create(bind=engine)

现在 engine 的来源将取决于您的 sqlalchemy 配置,但此代码应该传达需要发生的事情的要点。

关于python - 创建表后向 SQLAlchemy 模型添加索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419299/

相关文章:

python - 推荐一种有效的数据结构,用于在列表中存储大量重复值

python - Numpy 花式索引和赋值

python - 使用切片列表索引 numpy 数组

python - 从具有不同名称的 SQLAlchemy 模型创建表?

python - 为什么很多ORM在查询中不使用纯Python比较?

python - 在没有多次数据库请求的情况下在 Django 中多次调用外键对象

python - Tkinter GUI 重叠或刷新列表中的标签

python - 使用 matplotlib imshow 在 for 循环中显示 numpy 数组

python - Pandas 将系列分配给多索引的新列

python - 为什么从 Base 继承的 SQLAlchemy 类不需要构造函数?