Подтвердить что ты не робот

Первичный ключ 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...

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

4b9b3361

Ответ 1

Установите autoincrement=False, чтобы отключить создание последовательности или серийного номера для первичного ключа.

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