在Python中生成用户标识

时间:2011-09-06 20:05:10

标签: python database sqlalchemy userid

我在python中使用SQLAlchemy创建了一个简单的数据库,并为每个输入的用户提供了一个唯一用户ID列。我希望有一个运行计数器,只要添加新用户,就会提供下一个ID。

实施此操作的最佳方法是什么?一个值为最后一个id号的列,或者是一个完全独立的表(看起来很浪费。)有没有办法检查最后一个User.id并添加一个?这是用户基类:

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key = True)
    email_address = Column(String, nullable = False)
    username = Column(String, nullable = False)
    password = Column(String, nullable = False)
    first_name = Column(String)
    full_name = Column(String)
    join_date = Column(DateTime, default=func.now()) # enters the time upon initialization

    def __init__(self, email_address, username, password):
        self.email_address = email_address
        self.username = username
        self.password = password

    def __repr__(self):
        return "<User('%s', '%s', '%s', '%s')>" % (self.email_address, self.username, self.password, self.join_date)

3 个答案:

答案 0 :(得分:5)

请阅读:http://www.sqlalchemy.org/docs/core/schema.html#defining-sequences

密钥生成是数据库的一部分。

您只需要数据库分配唯一键。

答案 1 :(得分:0)

您使用的数据库是什么?如果是MySQL,你可能已经完成了。尝试创建User.id = None的用户。它应该采用下一个可用的ID。如果是自动增量,则在插入用户后,正确的ID将被放置在User.id中。

我通常在SQLAlchemy之外创建我的架构。你想要的是id列是主键,而不是null,并设置为自动增量。然后,如果您没有分配ID,它将自动获取下一个ID。

答案 2 :(得分:0)

在将新创建的对象刷新到DB后,

id将自动获取唯一值,因此,如我所知,如果您现在需要用户ID,则必须运行session.flush():

>>> user = User(email_address, username, password)
>>> print user.id
None
>>> session.add(user)
>>> session.flush()
>>> print user.id
100500

另外,请不要使用这种可怕的__init__方法!只有在想要添加一些自定义逻辑或验证时,才需要自定义init。但是这样的简单情况,如将关键字参数指定为declarative_base类(Base)已经提供的相应对象属性。