我有一个 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/