我有一个使用烧瓶炼金术的下表:
class Posts(db.Model):
id = db.Column(db.Integer, primary_key=True)
hashID = db.Column(db.String(6))
post = db.Column(db.String(500))
def __init__(self, post):
self.hashID = hashid.encode(self.id)
self.post = post
我想使用autoincrementd id字段创建一个散列。我从其他问题中看到
db.session.flush()
可以使用,但是这不起作用,因为我最好从init
内部获取id。上面使用
self.id
的代码将不起作用,因为self.id
返回一个nonetype。是否有方法获取将从init
内部生成的id?谢谢。 最佳答案
documentation声明在发出该实体的self.id
语句之前不会设置INSERT
属性。这意味着:除非在INSERT
方法中不发出__init__
语句,否则无法在那里获得自动递增的值。
我不知道hashid.encode
的功能,但如果该功能没有副作用,而且速度很快,那么您根本不需要将该字段存储在数据库中。相反,您可以添加一个property
:
class Posts(...):
self.id = ...
# other columns here
@property
def hashID(self):
return hashid.encode(self.id)
然后,您只需确保在将实体插入数据库之前不访问
hashID
属性。注意:此方法不会创建列
hashID
。如果需要hashID
作为数据库中的一列,可以先刷新对象,然后像op的初始代码一样设置hashID
。要想冲水,看看here。关于python - SQLAlchemy:从初始化程序获取值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37908935/