我正在尝试建立一个布局大致如下的表格:
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...
所有字段值都是通过外部系统提供的,并且会发现新的小部件,并且一些省略的 trait 值可能会随着时间(非常缓慢地)发生变化,但 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 进行测试
最佳答案
设置 autoincrement=False
禁用为主键创建序列或序列。
ext_id = db.Column(db.Integer, primary_key=True, autoincrement=False)
关于python - 没有自动增量的sqlalchemy主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498991/