Python 类之间共享的增量ID

Python 类之间共享的增量ID,python,Python,我正在用Python编写一个虚拟助手,我想将每个请求、响应和可能的错误存储在数据库中。 我将一个类用于请求,另一个类用于响应,另一个类用于错误。 我如何创建一个ID变量,该变量为各自的类实例共享,例如: 程序的首次运行程序的正常和正确运行: request_id = 1 response_id = 1 第二次运行时发生错误并停止程序以继续响应类: request_id = 2 error_id = 2 第三次运行程序运行良好,响应类跳过了id 2- 这就是我想要的行为: request_id

我正在用Python编写一个虚拟助手,我想将每个请求、响应和可能的错误存储在数据库中。 我将一个类用于请求,另一个类用于响应,另一个类用于错误。 我如何创建一个ID变量,该变量为各自的类实例共享,例如:

程序的首次运行程序的正常和正确运行:

request_id = 1
response_id = 1
第二次运行时发生错误并停止程序以继续响应类:

request_id = 2
error_id = 2
第三次运行程序运行良好,响应类跳过了id 2- 这就是我想要的行为:

request_id = 3
response_id = 3
请注意,在第三次运行中,该响应_id接收到id 3,且响应_id=2将永远不存在,因为在第二次运行中,进程以请求启动,并在错误中停止


ID变量必须总是唯一的,即使我的程序崩溃,我必须重新启动它。我知道我可以在程序运行时获取数据库中的最后一个id,但有一种方法可以在不破坏数据库的情况下获取它?

既然您使用数据库存储请求和响应,为什么不使用数据库为您生成此id呢


这可以通过使用主键int auto increment创建表来实现。每个请求/响应都应该插入到数据库中,并且数据库将为插入的每个记录生成一个唯一的id。

如果您不需要,一个可能的解决方案是使用DB而不是DB。您可以使用以下代码:

Tracker.py Status.py Success.py 等等 Error.py run.py 当然,您需要使用不同的URI,但现在您应该有了一个好主意。如果需要,还可以使用Pyro指定静态URI名称

输出应为:

$ c:\Python27\python.exe run.py
updated                        
1                              
updated                        
2                              
updated                        
3

HTH

但是可以使用三个不同的表格,对吗?我将使用一个用于请求,一个用于响应,另一个用于错误。是的。只需确保每个表都有一个自动递增的整数主键。谢谢您的回答,但是对于一个简单的ID实现来说,它太长了。嗨,没问题。我知道你不想使用db。谢谢
import Pyro4

class Status(object):
    def __init__(self, id):
        self._id = id
        self._pyro = None

    def connect(self, target):
        self._pyro = Pyro4.Proxy(target)

    def updateId(self):
        if ( not self._pyro is None ):
            self._pyro.setId(self._id)
            print "updated"
        else:
            print "please connect"

    def getId(self):
        if ( not self._pyro is None ):
            return self._pyro.getId()
        else:
            print "please connect"
from Status import *
class Success(Status):
    def __init__(self):
        super(Success,self).__init__(1)
from Status import *
class Wait(Status):
    def __init__(self):
        super(Wait,self).__init__(1)
from Status import *
class Error(Status):
    def __init__(self):
        super(Error,self).__init__(3)
from Success import *
from Wait import *
from Error import *

#just an example
s = Success()
w = Wait()
e = Error()

s.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
s.updateId()
print s.getId()
w.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
w.updateId()
print s.getId()
e.connect("PYRO:obj_c98931f8b95d486a9b52cf0edc61b9d6@localhost:51464")
e.updateId()
print s.getId()
$ c:\Python27\python.exe run.py
updated                        
1                              
updated                        
2                              
updated                        
3