2017-04-13 70 views
0

根據this,我想將一個枚舉存儲在數據庫中。peewee中的靜態表

那麼,假設我有一個Gender枚舉和一個Person模型。我想做一個選擇,如Person.select().where(Person.gender == Gender.MALE) 這可以通過在here中描述的Person中創建GenderField來實現。但是性別不會以數據庫的形式存在於表中,而我希望Person可以將外鍵指派給Gender表。

那麼如何將靜態性別數據存儲在數據庫中,然後通過枚舉值查詢Person表?

回答

0

可以,作爲表創建過程的一部分,填充性別表:

class Gender(Model): 
    label = CharField(primary_key=True) 

    class Meta: 
     database = db 


def create_schema(): 
    # Use an execution context to ensure the connection is closed when 
    # we're finished. 
    with db.execution_context(): 
     db.create_tables([Gender, ...], True) 
     if not Gender.select().exists(): 
      defaults = ['MALE', 'FEMALE', 'UNSPECIFIED'] 
      Gender.insert_many([{'label': label} for label in defaults]).execute() 

的唯一原因,使性別在這個例子中的表格,不過,會如果您打算動態地添加新的是運行時的性別標籤。如果設定值是固定的,我的看法是,你最好做這樣的事情:

class Person(Model): 
    GENDER_MALE = 'M' 
    GENDER_FEMALE = 'F' 
    GENDER_UNSPECIFIED = 'U' 

    name = CharField() 
    gender = CharField() 

# Then, simply: 
Person.create(name='Huey', gender=Person.GENDER_MALE) 
Person.create(name='Zaizee', gender=Person.GENDER_UNSPECIFIED) 
+0

與第一個問題是,它是Stringly類型的,我每次都詢問性別,由他們的名字。 第二個不會爲我工作。我需要將性別列爲表格,因爲它也用於其他關係。在這個愚蠢的例子中,我想用性別來標記廁所。 –