Python flask sqlalchemy:将db.event.listen()放在何处
我想在每次插入后更新postgres tsvector列。所以我声明了这个模型结构: models.pyPython flask sqlalchemy:将db.event.listen()放在何处,python,flask-sqlalchemy,Python,Flask Sqlalchemy,我想在每次插入后更新postgres tsvector列。所以我声明了这个模型结构: models.py db = SQLAlchemy() from sqlalchemy.types import UserDefinedType class TsVector(UserDefinedType): name = "TSVECTOR" def get_col_spec(self): return self.name class Sugges
db = SQLAlchemy()
from sqlalchemy.types import UserDefinedType
class TsVector(UserDefinedType):
name = "TSVECTOR"
def get_col_spec(self):
return self.name
class Suggestion(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
combined_en = db.Column(db.String)
vector_en = db.Column(TsVector)
__table_args__ = (db.Index('vector_en_index', 'vector_en', postgresql_using='gin'),)
trigger_snippet_en = db.DDL("""
CREATE TRIGGER faq_en_vector_update BEFORE INSERT OR UPDATE
ON suggestion
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger(vector_en, 'pg_catalog.english', 'combined_en')
""")
db.event.listen(Suggestion.__table__, 'after_create', trigger_snippet_en.execute_if(dialect='postgresql'))
如果应用程序在flask视图中插入数据,则不会更新tsvector列
设置
db.event.listen()
的正确位置在哪里?只有在通过ORM创建表时才会调用\u create
,不是吗?因此,在调用create\u all
时应该调用它-添加数据库后是否重新创建了数据库?嗯,不,它是一个现有的数据库,现在获得了这个新表。我无法重新创建数据库。你有什么想法吗?