Flask SqlAlchemy有一种方法可以将表大小限制为n行

时间:2016-12-05 09:12:47

标签: python flask sqlalchemy

我正在使用Flask和SQL Alchemy构建一个带有sqlite3数据库引擎的python应用程序。我需要将表大小限制为1000行,当达到此限制时,应删除最旧的条目以为新的条目腾出空间。如下例所示:

|  id |   uuid   |   name   |   type   |
________________________________________
|  1  |   78c0   |   Danny  |  chef    |
|  2  |   7966   |   Mike   |  welder  |
|  .  |   ...    |   ...    |  ...     |
|1000 |   ef1b   |   John   |  fireman |

在下一个INSERT INTO表之后应该是这样的:

|  id |   uuid   |   name   |   type   |
________________________________________
|  2  |   7966   |   Mike   |  welder  |
|  .  |   ...    |   ...    |  ...     |
|1000 |   ef1b   |   John   |  fireman |
|1001 |   7ce4   |   Fez    |  doctor  |

当我在配置文件中创建模型或某个地方时,有没有办法实现这一点?让我们说我的模型文件是:

class People(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(db.String, unique=True, nullable=False)
    name = db.Column(db.String(120), nullable=False)
    type = db.Column(db.String(120))

1 个答案:

答案 0 :(得分:2)

可能是风格很差,但你可以这样做:

class People(db.Model):
    ...
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    ...

def insert_person(person):
    db.session.add(person)
    row_count = Person.query.count()
    if row_count > 1000:
        first_person = User.query.order_by(Person.timestamp.asc()).first()
        db.session.delete(first_person)
    db.session.commit()