query mssql create_engine python database sqlalchemy

python - mssql - clave primaria sqlalchemy sin auto-incremento



sqlalchemy python (1)

Estoy tratando de establecer una tabla con un diseño aproximadamente como el siguiente:

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...

Todos los valores de campo se proporcionan a través de un sistema externo, y se descubren nuevos widgets y algunos de los valores de rasgos omitidos pueden cambiar con el tiempo (muy gradualmente), pero se garantiza que ext_id y w_code son únicos. Dada la naturaleza de los valores de ext_id, se comporta idealmente como clave principal.

Sin embargo, cuando creo un nuevo registro, especificando el valor de ext_id, el valor no se usa en el almacenamiento. En cambio, los valores en ext_id siguen un comportamiento de autoincremento.

>>> # from a clean database >>> skill = Widget(ext_id=7723, w_code=u''IGF35ac9'') >>> session.add(skill) >>> session.commit() >>> Skill.query.first().ext_id 1 >>>

¿Cómo puedo especificar a SQLAlchemy que el campo ext_id se debe usar como campo de clave principal sin autoincremento?

Nota: podría agregar una columna de ID sintética adicional como clave principal y hacer que ext_id sea una columna única en su lugar, pero esto complica mi código y agrega una inflamación adicional (mínima) a la base de datos y a todas las E / S. Espero evitar eso.

El problema se originó en un proyecto más grande, pero pude crear una reprografía más pequeña.

Prueba con sqlite


Establezca autoincrement=False para deshabilitar la creación de una secuencia o serie para la clave principal.

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