sqlalchemy主键没有自动增量

ste*_*lle 20 python database sqlalchemy

我正在尝试建立一个大致如下的布局表:

class Widget(db.Model):
    __tablename__ = 'widgets'
    ext_id = db.Column(db.Integer, primary_key=True)
    w_code = db.Column(db.String(34), unique=True)
    # other traits follow...
Run Code Online (Sandbox Code Playgroud)

所有字段值都是通过外部系统提供的,并且会发现新的Widgets,并且一些省略的特征值可能会随着时间的推移而变化(非常渐进),但ext_id和w_code保证是唯一的.鉴于ext_id值的性质,它理想地表现为主键.

但是,当我创建新记录时,指定ext_id值时,该值不会用于存储.相反,ext_id中的值遵循自动增量行为.

>>> # from a clean database
>>> skill = Widget(ext_id=7723, w_code=u'IGF35ac9')
>>> session.add(skill)
>>> session.commit()
>>> Skill.query.first().ext_id
1
>>> 
Run Code Online (Sandbox Code Playgroud)

如何向SQLAlchemy指定ext_id字段应该用作没有自动增量的主键字段?

注意:我可以添加一个额外的合成id列作为主键,并使ext_id成为一个唯一的列,但这会使我的代码复杂化,并为数据库和所有I/O添加(最小)额外膨胀.我希望避免这种情况.

问题起源于一个更大的项目,但我能够创建一个较小的repro.

用sqlite测试

dav*_*ism 34

设置autoincrement=False为禁用为主键创建序列或序列.

ext_id = db.Column(db.Integer, primary_key=True, autoincrement=False)
Run Code Online (Sandbox Code Playgroud)