在Python中生成用户ID

1 投票
3 回答
3154 浏览
提问于 2025-04-17 01:37

我用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

在把新创建的对象保存到数据库后,id会自动生成一个唯一的值。所以,如果你现在需要用户的id,你必须运行 session.flush()。

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

另外,请不要使用这种糟糕的 __init__ 方法!只有在你想添加一些自定义逻辑或验证的时候,才需要自定义初始化方法。但像把关键字参数直接赋值给对象属性这样的简单情况,declarative_base 类(Base)已经提供了。

0

你在用什么数据库?如果是MySQL的话,你可能已经搞定了。试着创建一个用户,设置User.id为None。这样的话,它会自动使用下一个可用的id。如果这个id是自动增加的,插入用户后,User.id会自动填上正确的id。

我通常是在SQLAlchemy之外创建我的数据库结构。你需要确保id这一列是主键,不能为null,并且设置为自动增加。这样,如果你没有给id赋值,它会自动使用下一个id。

5

请查看这个链接:http://www.sqlalchemy.org/docs/core/schema.html#defining-sequences

键的生成是数据库的一部分。

你只需要让数据库自己分配唯一的键。

撰写回答