Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在SQLite数据库中存储日期/状态的高效数据结构?_Python_Django_Database_Sqlite_Data Structures - Fatal编程技术网

Python 在SQLite数据库中存储日期/状态的高效数据结构?

Python 在SQLite数据库中存储日期/状态的高效数据结构?,python,django,database,sqlite,data-structures,Python,Django,Database,Sqlite,Data Structures,我正在使用Django 1.10、Python2.7、和SQLite3构建一个web应用程序,跟踪对象的状态以及上次更改的时间 例如,每24小时,用户将为主机导入一个开放端口列表(如下面的列表): 05/01/2017 ========== Host Open-Ports 123.45.67.89 22, 80, 443 ... ... 一个端口(或多个端口)可能在一天内关闭: 05/02/2017 =========

我正在使用Django 1.10、Python2.7、和SQLite3构建一个web应用程序,跟踪对象的状态以及上次更改的时间

例如,每24小时,用户将为主机导入一个开放端口列表(如下面的列表):

05/01/2017
==========
Host                Open-Ports
123.45.67.89        22, 80, 443
...                 ...
一个端口(或多个端口)可能在一天内关闭:

05/02/2017
==========
Host                Open-Ports
123.45.67.89        443
...                 ...
我希望我的Django应用程序显示以下数据:

IPv4
   123.45.67.89
Ports
   22 [Closed on 05/02/2017]
   80 [Closed on 05/02/2017]
   443 [Open]
跟踪港口状态的最有效方法是什么?

目前,我有一个具有以下字段的主机模型:

  • IPv4地址(GenericPaddressField)
  • 主机名(CharField)
  • 地点(查菲尔德)
我应该添加什么新字段(及其类型)来实现此目标

此信息将存储在SQLite3数据库中

我的SQL表应该如何设置?我应该如何比较日期以知道端口何时关闭?我需要两张桌子来存储今天的信息和昨天的信息吗

可能有100000多台主机,因此我需要尽可能优化此方法

谢谢大家!

澄清

我需要保留港口关闭的日期。 如果在第三天,我们有:

05/03/2017
==========
Host                Open-Ports
123.45.67.89        22, 443
...                 ...
然后我们会看到:

IPv4
   123.45.67.89
Ports
   22 [Open]
   80 [Closed on 05/02/2017]
   443 [Open]

其中端口80仍然表示它已于2017年2月5日关闭。

对于多次打开和关闭的端口,您希望输出什么?如果您只想要最近打开的和最近关闭的,则会使所需的数据更高效。如果您不想跟踪主机状态(只想要最新状态,旧数据不重要),请不要保留它们!只需更新表中的主机状态,不为现有主机、端口添加新行。您的表应具有
状态
字段(关闭、打开),因此当用户不更新端口状态时,您保持旧状态,如果用户关闭端口,则不删除该行,只需更改
状态
当用户打开一个端口时,如果它存在,只需更新状态。您还需要添加
port\u closed\u datetime
字段,(当用户关闭一个端口时,更新此字段,当端口关闭时,返回此字段的值(好的,为该字段使用更好的名称:-)@aliva我感谢您的帮助!但有一个问题;我的表用于主机,而不是端口,那么添加状态字段的最佳方式是什么?我应该在Hosts中创建一个
port\u status
字段,创建一个信息字典
{22:'open',80:'closed',443:'open'}
,并将其存储为BLOB吗?