Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy主键不带自动递增_Python_Database_Sqlalchemy - Fatal编程技术网

Python sqlalchemy主键不带自动递增

Python sqlalchemy主键不带自动递增,python,database,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... 所有字段值都是通过外部系统提供的,并且会发现新的小部件,一些被忽略的特征值可能会随着时间的

我试图建立一个布局大致如下的表:

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 = db.Column(db.Integer, primary_key=True, autoincrement=False)
但是,当我创建新记录并指定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进行测试设置为禁用为主键创建序列或序列

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

你的小部件是什么样子的?我想我使用您所需要的功能的方式与您使用它的方式完全相同,只要我在constructor(或其他地方)中设置self.ext_id,它就会工作。