【问题标题】:Flask-SQLAlchemy: Create functional indexFlask-SQLAlchemy:创建功能索引
【发布时间】:2014-02-27 21:58:36
【问题描述】:

我正在尝试创建一个函数索引(使用 PostgreSQL 函数 lower())。使用 Alembic 创建表时出现此错误:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) column "lower" does not exist
 'CREATE INDEX ix_cities_name ON cities (lower)' {}

代码如下:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

class City(db.Model):
    __tablename__ = 'cities'

    name = db.Column(db.String(100), nullable=False)

db.Index('ix_cities_name', db.func.lower(db.metadata.tables['cities'].c.name))

【问题讨论】:

标签: python postgresql sqlalchemy flask-sqlalchemy


【解决方案1】:

你可以这样做:

from sqlalchemy import func

db.Index('ix_cities_name', func.lower(City.name))

参考:

Functional indexes are supported as well, typically by using the
:data:`.func` construct in conjunction with table-bound
:class:`.Column` objects::

    Index("some_index", func.lower(sometable.c.name))

另外,谢谢你这个问题,我知道如何创建索引了!

【讨论】:

    【解决方案2】:

    不幸的是,alembic 还不能为功能索引生成正确的修订版(我希望如此)。您的迁移应如下所示:

    op.execute("CREATE INDEX ix_cities_name ON cities (LOWER(name))")
    

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2017-07-23
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多