sqlalchemy主键没有自动增量

时间:2014-12-16 06:44:36

标签: 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...

所有字段值都是通过外部系统提供的,并且会发现新的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
>>> 

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

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

问题起源于一个较大的项目,但我能够创建一个较小的复制品。

使用sqlite进行测试

1 个答案:

答案 0 :(得分:32)

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

ext_id = db.Column(db.Integer, primary_key=True, autoincrement=False)