有没有办法动态加载数据到Python数据结构而不重新创建?
我有一个程序,它从数据库表中生成一个列表,并且是实时运行的。偶尔会有新数据被添加到这个数据库表里。每次从表中查询数据都很麻烦,而且耗时,所以我们希望这个过程尽可能实时。应该怎么做才好呢?
这个过程是这样的:
列表是通过一个SQL查询生成的,这个查询大约需要2到4秒才能执行完。
这个列表被程序A用来执行一些功能。
数据会不断地被添加到数据库表中。我们只需要将新数据添加到列表中,这样程序A就可以实时使用这些数据。
我还没有尝试写任何代码,因为我还不确定应该怎么设计。我们只能使用Python,因为系统中已经有1万行Python代码在运行。
有没有人能帮我提供一些合适的方法、模块等建议?
编辑
程序A是程序中的一个过程。我想到的伪代码大概是这样的:
def processA(list):
while 1:
parse file
do something
def run():
list = generate list from run sql query
processA(list)
if __name__=="__main__":
run()
4 个回答
0
这听起来有点像变通的方法,但在你第一次查询的时候,可以创建一个临时表来存放结果。给这个表加一列,用来存放一个递增的数字,我叫它id。然后给这个表加一个触发器,当数据发生变化时,它会更新你的临时表。接着,你可以再次查询数据库,只查找那些id比你第一次提取的最后一个元素大的记录。这样查询会快很多,应该能让你接近实时数据。保持一个持续的连接也可能会稍微有帮助。
我还建议你检查一下数据库是否为这个查询建立了良好的索引,2到4秒的时间听起来有点长。也许你还可以稍微优化一下你的查询。
0
难道不应该直接再去数据库查询一下自从你上次查询以来新增的数据吗?比如可以用 key > highest_key_in_list
或者 date > highest_date_in_list
这样的方式,而不是重新加载整个数据吗?
0
如果程序里要往表格里添加数据,那就同时把数据加到列表里。
如果有多个地方在往表格里添加数据,那就查询一下表格,找出所有主键大于你上次获取的那个主键的记录。