Python 如何登录数据库?
我有一个系统,允许用户上传视频到Youtube,同时我在数据库中保存日志,现在的问题是我不知道如何建模 事实证明,使用数据库的日志系统(我使用Django的ORM)过于冗长,因为我需要生成格式良好的页面,以允许“管理者”用户查看用户的活动 现在我有两个选择: 第一名: 使用外键和字段指示类型。 优点:Python 如何登录数据库?,python,database,logging,model,Python,Database,Logging,Model,我有一个系统,允许用户上传视频到Youtube,同时我在数据库中保存日志,现在的问题是我不知道如何建模 事实证明,使用数据库的日志系统(我使用Django的ORM)过于冗长,因为我需要生成格式良好的页面,以允许“管理者”用户查看用户的活动 现在我有两个选择: 第一名: 使用外键和字段指示类型。 优点: 简单实现 缺点: 当我必须查询日志时,额外的工作 秒: 使用继承将日志分为三部分:创建、更新和删除。 创建必须存在才能存在视频条目,如果有删除日志,则删除视频条目 优点: 编程方面的
- 简单实现
- 当我必须查询日志时,额外的工作
- 编程方面的简单逻辑
- 复杂的模型实现,对于将来的扩展可能是不灵活的
我不确定,哪一个更好?或者我把所有这些问题都搞错了?(好像已经有了解决此类问题的模式?例如,在第一个变体中,您可以为您的
日志
模型创建3个额外的查询管理器
,并使用它们(它将类似于2个变体,但不创建3个额外的模型)
它们可以像create\u objects
、update\u objects
和delete\u objects
或更短(例如create\u log
)
下面是manager类的示例:
from django.db.models import Manager
class LogManager(Manager):
def __init__(self, type):
super(LogManager, self).__init__()
# add check of type if you need
self._type = type
def get_queryset(self):
return super(LogManager, self).get_queryset().filter(type=self._type)
此代码仅用于演示(我没有测试它)
在模型类中,您应该指定3个附加管理器,如下所示:
from django.db.models import Model
class Log(Model):
create_log = LogManager('create')
update_log = LogManager('update')
delete_log = LogManager('delete')
或者您可以使用
\uuuu getattr\uuuu
方法获得适当的管理器,但“显式优于隐式”。您希望在数据库中而不是在日志文件中创建日志的原因是什么?如果您需要报告数据,有一些好的工具可以为您提供日志文件上的实时数据。尝试Splunk或Graphite。日志是为客户机(即“经理”用户)编写的,而不是“技术娴熟”。当用户查看视频条目以查看修改历史时,我希望生成漂亮的报告页面。谢谢你的评论,虽然这可能不是我想要的。我不认为第二种选择有什么好处。你能解释一下为什么要这么做吗?我用Django ORM。例如,要查看视频条目是由哪个上传者创建的,只需键入video.createlog.uploader
。第一个选项我需要搜索日志,并通过创建精确定位日志。我想,只要找到最早的日志就足够了。谢谢,我对django/python还是新手,不知道我能做到。