SQLite:删除一个后如何插入新的rowid?

时间:2017-08-30 06:40:40

标签: sqlite

假设我的表是,

CREATE TABLE bookmark (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    Name STRING(64) 
);

我在此表中插入了三行,如下所示:

Id   | Name
1    | Bookmark 1
2    | Bookmark 2
3    | Bookmark 3

现在,如果我删除第3行,那么我就明白了:

Id | Name
1  | Bookmark 1
2  | Bookmark 2

现在我插入一个名为Bookmark 4的新行,我得到了这个:

Id | Name
1  | Bookmark 1
2  | Bookmark 2
3  | Bookmark 4

我不应该期待以下情况吗?

Id | Name
1  | Bookmark 1
2  | Bookmark 2
4  | Bookmark 4

任何人都知道如何做到这一点?

注意:这不是SQLite行为,而是SQLAlchemy问题。作为@CL。指出here,它真的是我想要的。

1 个答案:

答案 0 :(得分:1)

很抱歉,最后我发现它是由SQLAlchemy 1.1.13引起的,它没有为SQLite设置AUTOINCREMENT字段,即使我们已经指定了如下,

db = SQLAlchemy()
id = db.Column(db.Integer, primary_key=True, autoincrement=True)

当我使用Flask时,指定时,

app.config['SQLALCHEMY_ECHO'] = True

日志显示实际上未设置AUTOINCREMENT

经过一番挖掘后,在SQLAlchemy 1.1.13(source)中为SQLite做了,

class Bookmark(db.Model):
    __tablename__ = "bookmark"
    __table_args__ = {'sqlite_autoincrement': True}

对于SQLAlchemy 1.2,以下内容可能有效(未经测试),

id = db.Column(db.Integer, primary_key=True, sqlite_autoincrement=True)