Я пытаюсь установить таблицу с макетом примерно следующим образом:
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...
Все значения поля предоставляются через внешнюю систему, а новые Виджеты обнаружены, а некоторые из значений пропущенных признаков могут со временем меняться (очень постепенно), но 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 уникальным столбцом вместо этого, но это и усложняет мой код, и добавляет (минимальный) дополнительный вздутие в базу данных и все операции ввода-вывода. Я надеюсь избежать этого.
Проблема возникла из более крупного проекта, но я смог создать меньший реестр.
Тестирование с помощью sqlite