由于 Django 和 SQLAlchemy 处理 JSON 数据的方式很复杂,我必须创建一个使用它们的模型以及标准 SQLAlchemy 的系统。
我遇到的问题是,当我通过 table.update()
方法更新表中的信息时,在我的 SQLAlchemy 表模型接收到更改之前会有相当大的延迟。
有没有办法强制模型更新?
我的代码是这样的:
# Database Connection
engine = create_engine('mysql+pymysql://'+dbusername+':'+dbuserpass+dbserver+dbname,
pool_recycle=3600, echo=False)
con = scoped_session(sessionmaker(autocommit=True,autoflush=False,bind=engine))
Session = sessionmaker(bind=engine)
sess = Session()
meta = MetaData(engine)
insp = inspect(engine)
Base = declarative_base()
con.close()
engine.dispose()
# sqlalchemy table model
class ContactsTable(Base):
__tablename__ = 'contacts_tbl'
db_id = Column(Integer, primary_key=True)
per_contact_id = Column(JSON)
createdDateTime = Column(JSON)
lastModifiedDateTime = Column(JSON)
distlists = Column(JSON)
# Theres a lot of code missing here you can see the basics of what I'm doing, adding data and then reading
def add_to_dist(contact,dist,tbl=contacts_tbl):
con.execute(tbl.update().values(distributionLists=dists).where(tbl.c.per_contact_id==contact))
def get_dist_members(name):
data = sess.query(ContactsTable).filter(ContactsTable.distributionLists.contains(name)).all()
一切正常。只是查询数据已经过时,并且似乎需要最多 10 分钟才能刷新。这很烦人,因为它正在通过显示数据的网页运行。它确实需要立即反射(reflect)变化。
如果事实上我做的整件事都是错误的,那么请随意教训我!
最佳答案
通过向引擎添加isolation_level="READ UNCOMMITTED"解决了这个问题:
engine = create_engine('mysql+pymysql://'+dbusername+':'+dbuserpass+dbserver+dbname, pool_recycle=3600, echo=False, isolation_level="READ UNCOMMITTED")
感谢 Ilja 为我指明了正确的方向。
关于python - 更快地刷新 sqlalchemy 表模型中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58871386/