我正在尝试使用 SQLAlchemy 声明一个表。我想在表中包含一个 BIGINT 自动递增主键。这似乎不适用于 sqlite 作为数据库后端。另一方面,让 INTEGER 自动递增主键就可以了。
我读到 sqlite 的 ROWID 是一个签名的 bigint。但是有没有办法拥有一个 BIGINT 自动增量字段?这样我就可以交换后端而不用担心数据库特定的问题(假设 MySQL 和 Postgres 支持 bigint 自动递增字段)。
谢谢。
我正在尝试使用 SQLAlchemy 声明一个表。我想在表中包含一个 BIGINT 自动递增主键。这似乎不适用于 sqlite 作为数据库后端。另一方面,让 INTEGER 自动递增主键就可以了。
我读到 sqlite 的 ROWID 是一个签名的 bigint。但是有没有办法拥有一个 BIGINT 自动增量字段?这样我就可以交换后端而不用担心数据库特定的问题(假设 MySQL 和 Postgres 支持 bigint 自动递增字段)。
谢谢。
对于通过谷歌到达这里并且只需要解决方案的其他人,我编写了以下代码:
# 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')
这将允许您在数据库上使用 BIGINT,并在运行单元测试时使用 INT。
Sqlite 不允许BIGINT
用作自动增量的主键。
但是,由于sqlite 列类型的动态特性,您可以创建特定于后端的列类型并INTEGER
在后端使用类型sqlite
,请参阅SQLAlchemy:如何根据其后端有条件地选择列的类型。
希望有帮助。