Trying ZODB, background in Relational: mimic auto_increment?

Diez B. Roggisch deets at nospam.web.de
Thu Aug 14 10:15:11 EDT 2008


Jean-Paul Calderone wrote:

> On Thu, 14 Aug 2008 05:22:35 -0700 (PDT), Phillip B Oldham
> <phillip.oldham at gmail.com> wrote:
>>Hi all. I'm playing with standalone ZODB at the moment trying to get a
>>better understanding of its use in applications. I come from a
>>PHP/MySQL background, and I'm taking my first steps with Python at the
>>same time.
>>
>>One of the things I'm not understanding about ZODB is assigning
>>incremental IDs to objects. For instance, if I were to be writing a
>>support-ticket system I'd want to give each ticket a unique number,
>>but one that's "human-useable" (otherwise you could just use a UUID -
>>try giving one of those over the phone!).
>>
>>Also, how would one add a new item to the db in this way?
>>
>>For instance:
>>
>>class Ticket(Persistence):
>>  def __init__(self):
>>    self.id = '' # How do I add a new incremental ID here?
>>
>># and later on in the app
>>
>>tkt = Ticket()
>>dbroot[?????] = tkt
>>
>>How would one assign a unique ID to the root at that point?
> 
> Here's one way
> 
>     class Sequence(Persistence):
>         def __init__(self):
>             self.current = 0
> 
>         def next(self):
>             self.current += 1
>             return self.current
> 
>     ticketSequence = Sequence()
> 
>     class Ticket(Persistence):
>         def __init__(self):
>             self.id = ticketSequence.next()

Be aware that this isn't working concurrently. Depending on your
application, this can be mitigated using a simple threading.Lock. 

Diez



More information about the Python-list mailing list