假设我的表是,
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,它真的是我想要的。
答案 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)