我试图建立一个布局大致如下的表格:
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进行测试
答案 0 :(得分:32)
设置autoincrement=False
以禁用为主键创建序列或序列。
ext_id = db.Column(db.Integer, primary_key=True, autoincrement=False)