我正在try 建立一个布局大致如下的表:

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_代码保证是唯一的.考虑到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字段应该用作主键字段而不自动递增?

注:

问题源于一个较大的项目,但我能够创建一个较小的复制品.

使用sqlite进行测试

推荐答案

设置autoincrement=False以禁止为主键创建序列或序列.

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

Database相关问答推荐

Oracle SQL 开发人员中的 DB2 数据库

skip bad record in redshift data load

在一次 SQL 查询中更新多行的多列

聊天的数据库模式:私有和群组

按最强 LIKE 排序 SQL?

每个 Docker 容器一个或多个数据库

Tornado 的非阻塞 ORM?

PostgreSQL 字符变长限制

MySQL是否允许使用点创建数据库?

限制一个 sqlite 表的最大行数

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

Oracle 的免费桌面客户端?

如何配置 NLog 以写入数据库?

限制来自本地主机的 MySQL 连接以提高安全性

如何一次插入1000行

如何在多列上创建 FULLTEXT 索引?

试图在我的环境中设置 Postgres,但似乎无法获得 intidb 的权限

每个开发人员一个数据库?

Web 应用程序的文件存储:文件系统、数据库和 NoSQL 引擎

为什么 Rails 迁移在应用程序中定义外键而不在数据库中定义外键?