Flask + SQLAlchemy:为表创建索引列

时间:2018-08-09 13:04:00

标签: python flask sqlalchemy flask-sqlalchemy

我很难用SQLALchemy在sqlite3数据库中为表创建索引。每次通过celery的定期任务将一行添加到数据库时,该行都会被索引。

也许我的理解是有缺陷的。我认为db.Index('scheduleId', Schedule.taskId)会在第一行数据到达数据库后自动创建一个新的'scheduleId'列,其值为1?

app / model.py

class Schedule(db.Model):
    __tablename__ = 'schedule'
    taskId = db.Column(db.String(50), primary_key=True)

    def __init__(self, **kwargs):
        super(Schedule, self).__init__(**kwargs)

db.Index('scheduleId', Schedule.taskId)

app / tasks / test.py

@periodic_task(run_every=crontab(minute="*"), bind=True)
def periodic_run_get_manifest(self):
    with app.app_context():
        task_id = self.request.id
        s = Schedule()
        s.taskId = task_id
        db.session.add(s)
        db.session.commit()
        rowId = db.session.query(Schedule).order_by(Schedule.scheduleId.desc()).first()

运行定期任务时,出现以下错误:

  

AttributeError:类型对象“ Schedule”没有属性“ scheduleId”

1 个答案:

答案 0 :(得分:0)

修改您的课程模型

class Schedule(db.Model):
        __tablename__ = 'schedule'
        taskId = db.Column(db.String(50), unique=True)
        scheduleId = db.Column(db.Integer, primary_key=True) # will create index and autoincrement both

Autoincrement Docs

Index Docs