簡體   English   中英

在Python中生成用戶ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM