我在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)
答案 0 :(得分:5)
答案 1 :(得分:0)
您使用的数据库是什么?如果是MySQL,你可能已经完成了。尝试创建User.id = None的用户。它应该采用下一个可用的ID。如果是自动增量,则在插入用户后,正确的ID将被放置在User.id中。
我通常在SQLAlchemy之外创建我的架构。你想要的是id列是主键,而不是null,并设置为自动增量。然后,如果您没有分配ID,它将自动获取下一个ID。
答案 2 :(得分: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__
方法!只有在想要添加一些自定义逻辑或验证时,才需要自定义init。但是这样的简单情况,如将关键字参数指定为declarative_base
类(Base)已经提供的相应对象属性。