python - 没有自动增量的sqlalchemy主键

标签 python database 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...

所有字段值都是通过外部系统提供的,并且会发现新的小部件,并且一些省略的 trait 值可能会随着时间(非常缓慢地)发生变化,但 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 成为唯一列,但这既使我的代码复杂化,又给数据库和所有 I/O 添加了(最小的)额外膨胀。我希望避免这种情况。

问题源于一个较大的项目,但我能够创建一个较小的重现。

使用 sqlite 进行测试

最佳答案

设置 autoincrement=False禁用为主键创建序列或序列。

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

关于python - 没有自动增量的sqlalchemy主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498991/

相关文章:

database - 如何压缩未排序的数字列表?

Python + Flask 应用程序在 Pycharm 在 127.0.0.1 上运行后从错误的文件夹运行

python - 类型提示 sqlalchemy 查询结果

python - 为什么我的 PyGame 应用程序根本不运行?

python - 获取 pandas 数据框中每一列的唯一值 - 帮助我创建更小、更易于管理的数据框来执行指标

php - 建议不要在 MySql 查询中为字段名称添加单引号

python - SQLAlchemy session 包含我的信息,没有 session.add()

Python Tkinter,显示实时数据

python - 用于图像处理的 Python 中的带通滤波器

mysql - mysql选项--unbuffered的使用