Python 如何登录数据库?

Python 如何登录数据库?,python,database,logging,model,Python,Database,Logging,Model,我有一个系统,允许用户上传视频到Youtube,同时我在数据库中保存日志,现在的问题是我不知道如何建模 事实证明,使用数据库的日志系统(我使用Django的ORM)过于冗长,因为我需要生成格式良好的页面,以允许“管理者”用户查看用户的活动 现在我有两个选择: 第一名: 使用外键和字段指示类型。 优点: 简单实现 缺点: 当我必须查询日志时,额外的工作 秒: 使用继承将日志分为三部分:创建、更新和删除。 创建必须存在才能存在视频条目,如果有删除日志,则删除视频条目 优点: 编程方面的

我有一个系统,允许用户上传视频到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还是新手,不知道我能做到。