[英]Generating User IDs in Python
我已經在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)
閱讀以下內容: http : //www.sqlalchemy.org/docs/core/schema.html#defining-sequences 。
密鑰生成是數據庫的一部分。
您只希望數據庫分配唯一鍵。
您正在使用什么數據庫? 如果是MySQL,您可能已經完成了。 嘗試創建一個用戶,其中User.id = None。 它應該帶有下一個可用的ID。 如果它是自動遞增的,則在插入用戶后,正確的ID將放置在User.id中。
我通常在SQLAlchemy之外創建我的架構。 您想要的是id列是主鍵,而不是null,並設置為autoincrement。 然后,如果您不分配ID,它將自動獲取下一個ID。
將新創建的對象刷新到數據庫后,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)已提供的相應對象屬性的簡單情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.