如何使用 extra() 可移植跨数据库后端进行 Django 查询?
我有一个小项目,涉及按出版年份浏览文章档案。
我使用了这个 其他问题,用于建立文章出版年份和这些年份的文章计数列表。它在我的带有 SQLite 的测试服务器上运行得很好。由于生产服务器将依赖于 PostgreSQL,因此我正在寻找一种方法来在 PostgreSQL 中实现相同的功能,并最终使用了 EXTRACT 关键字。我使用“导入设置”之类的东西来检测当前数据库后端并执行正确的查询。
我的观点是,所有这些看起来越来越像肮脏的东西。以一种非常不优雅、不可测试且难以维护的方式解决问题的蹩脚黑客。作为一名网络程序员初学者,我问我经验丰富的前辈,
你会如何正确处理这个问题?
I have a little project that involved article archive browsing by year of publication.
I used the trick given in this other question to build a list of article publication years and article counts for those years. It works pretty well on my test server with SQLite. Since the production server will rely on PostgreSQL I am looking for a way to achieve the same thing in PostgreSQL and ended up toying with the EXTRACT keyword. I use something like "import settings" to detect the current database backend and execute the right query.
My point is all of that look more and more like a dirty & crappy hack to solve an issue in a very inelegant, untestable and poorly maintainable way. As a web programmer beginner I ask my experienced elder,
How would you deal with that correctly ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
作为原始 sql 的选项:
您可以使用 ORM 计算每年的计数(例如 如何使用 Django ORM 获取所有文章的年份列表以及文章计数 )
然后将该值存储在某个地方(在模型中或在缓存中......),以免被 ORM 计算的缓慢速度所淹没。
As an option to the raw sql:
You can calculate the count per year with the ORM (e.g. How to use Django ORM to get a list by year of all articles with an article count )
Then you store that value somewhere (in a model or in cache ...) in order not to be overwhelmed by the slowness of the ORM calculation.