primary - sqlite sequence
¿BIGINT autoincremento funciona para SQLAlchemy con sqlite? (2)
Estoy tratando de declarar una tabla usando SQLAlchemy. Me gustaría incluir una clave primaria incremental automática de BIGINT en la tabla. Esto no parece funcionar con sqlite como el backend DB. Por otro lado, tener INTEGER auto incrementando la clave primaria funciona bien.
Leí que sqlite tiene ROWID que es un bigint firmado. Pero, ¿hay alguna forma de tener un campo de incremento automático de BIGINT? De esta manera puedo intercambiar backends sin preocuparme por problemas específicos de DB (suponiendo que MySQL y Postgres soportan campos de incremento automático de Bigint).
Gracias.
Para otros que llegan aquí a través de Google y solo necesitan una solución, he escrito el siguiente código:
# SQLAlchemy does not map BigInt to Int by default on the sqlite dialect.
# It should, but it doesnt.
from sqlalchemy import BigInteger
from sqlalchemy.dialects import postgresql, mysql, sqlite
BigIntegerType = BigInteger()
BigIntegerType = BigIntegerType.with_variant(postgresql.BIGINT(), ''postgresql'')
BigIntegerType = BigIntegerType.with_variant(mysql.BIGINT(), ''mysql'')
BigIntegerType = BigIntegerType.with_variant(sqlite.INTEGER(), ''sqlite'')
Esto le permitirá usar BIGINT en una base de datos, e INT para cuando ejecute pruebas unitarias.
Sqlite no permite BIGINT
utilizado como clave principal con autoincrement.
Pero, debido a la naturaleza dinámica de los tipos de columnas sqlite , puede crear un tipo de columna específico del back-end y usar el tipo INTEGER
en el caso de back-end sqlite
, ver SQLAlchemy: cómo elegir condicionalmente el tipo para la columna dependiendo de su back-end .
Espero que ayude.