Python 有没有办法检查Django数据库中的新对象/条目?
我正在用Tornado编写一个Python服务器,它与HTML5WebSocket一起工作。我的服务器通过JavaScript与客户端浏览器建立连接。一旦创建了连接,它将保持打开状态,直到浏览器(或服务器将其关闭)。我需要定期检查我的一个模型是否已更改或数据库是否已更新 下面的代码示例演示了我的意思:Python 有没有办法检查Django数据库中的新对象/条目?,python,database,django,django-models,reload,Python,Database,Django,Django Models,Reload,我正在用Tornado编写一个Python服务器,它与HTML5WebSocket一起工作。我的服务器通过JavaScript与客户端浏览器建立连接。一旦创建了连接,它将保持打开状态,直到浏览器(或服务器将其关闭)。我需要定期检查我的一个模型是否已更改或数据库是否已更新 下面的代码示例演示了我的意思: >>> mymodels = MyModel.objects.all() >>> len(mymodels) 150 >>> # Some s
>>> mymodels = MyModel.objects.all()
>>> len(mymodels)
150
>>> # Some stuff happens on the client and the model is changed, one more entry is added
>>> mymodels = MyModel.objects.all()
>>> len(mymodels)
151
这一切都发生在服务器应用程序中,其中对模型的更改将发生在运行的服务器脚本的一个“会话”中。我是否可以检查新对象或刷新Django数据库
如果还不清楚,我的意思是:假设我有一个名为MyModel的模型。首次运行服务器脚本时,它有150个不同的条目或数据库行。我从客户端与服务器建立WebSocket连接,并请求在发生新更改时更新我。在我的客户机的其他地方,其他一些用户执行一些操作,在我的数据库中为MyModel类创建一个新行。我的服务器在保持与原始客户机相同的连接的同时,需要能够在不停止执行的情况下检测到更改
定期检查并不是问题,它实际上是确保Django数据库API知道新添加的信息。有没有我能保证的方法最初发布的示例代码实际上不起作用。无论我向模型中添加了多少项,MyModel.objects.all()的长度仍然是150。如果我重新启动Django shell,它会更新计数
我还尝试了其他一些事情:
- 使用内置的reload()函数重新加载模型模块
- 为MyModel的特定集合筛选模型
- 使用原始SQL查询选择所有内容并根据特定条件进行筛选
另外,您是否阅读了确保Django正在做您认为它正在做的事情?您可以在指定的时间间隔发出ajax请求,检查计数的变化,并刷新计数。如果计数不是sameDjango没有“数据库”,它的模型调用只是围绕对数据库的SQL调用的包装。数据库服务器有两种方法可以告诉您是否发生了更改:轮询数据库以进行更改(这会消耗大量时间和资源),或者使用一些数据库队列机制(通常使用Java,但可以连接到python进程)。您的脚本是多线程的吗?你有没有考虑过实现一个pre或post保存钩子?你的服务器脚本具体在做什么?很抱歉,我已经更新了我的帖子。谢谢你的帮助。问题不在于长轮询或使用AJAX。它只是在长时间运行的脚本的同一执行过程中检查数据库中的更新。