在新模型上设置ID

时间:2014-10-16 13:31:26

标签: mysql sqlalchemy flask-sqlalchemy

是否可以创建模型的新实例并设置其ID?每当我尝试这样做时,模型都会被持久化,但ID会被设置为MySQL自动增量列表中的下一个可用数字。

例如,我想像这样创建一个新的传感器:

s = new Sensor()
s.id = 14
s.name = 'my sensor'
db.session.add(s)
db.session.commit()

saved_instance = Sensor.query.get(14)
assert saved_instance is not None

断言失败。

1 个答案:

答案 0 :(得分:1)

我会继续前行(因为你还没有提供让我知道的信息),但我相信你的传感器声明会使用自动增量。如果是这种情况,那么事先设置它将被完全忽略。

sensor = Table('sensor', metadata,
    Column('id', Integer, primary_key = True),

MySQL主键中预先打包并自动增加。

对于大多数数据库(包括MySQL),如果数据库中已存在ID 14,则自动增量将不允许在创建阶段再次使用该数字。即使你删除了持有ID 14的行。

如果系统中已经存在ID,您可以在事后返回并更新行以获得不同的ID。

s = new Sensor()
s.id = 14
s.name = 'my sensor'
db.session.add(s)
db.session.commit()

saved_instance = Sensor.query.get(14)
print(saved_instance is not None) # Should fail.

print(s.id) # will return the ID that was actually inserted.
s.update().\
    where(users.c.id==s.id).\
    values(id=14)