我正在进行积极的缓存,我想确保没有人意外地编写直接更新数据库的代码。我想解决这个问题的方法是重命名普通对象管理器 .rw_objects
以供缓存使用,并将 .objects
替换为记录警告的管理器非更新访问,如果有人尝试从中进行更新,则会引发异常。
我已经编写了一个对象管理器和一个查询集,但我不确定如何检查查询是否正在更新数据库。
有什么建议吗?
最佳答案
我在这里考虑两种方法。
创建自定义管理器,覆盖
_insert()
,_update()
引发异常/记录查询,以及get_query_set()
返回覆盖create()
的自定义查询集,get_or_create()
,和update()
.如果您使用的是 django 1.2,请在
settings.py
中创建另一个数据库连接称之为"READ_ONLY"
,并创建一个使用该连接返回 QuerSet 的自定义管理器(如def get_query_set() return super(ReadOnlyManager, self).get_query_set().using("READ_ONLY")
,并将连接标记为只读。(一种方法是为数据库连接"READ_ONLY"
创建只读用户......如果你正在使用 Postgres,你可以做类似 How do you create a read-only user in PostgreSQL? )
关于python - 只读 Django 对象管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4493385/