是否可以创建模型的新实例并设置其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
断言失败。
答案 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)