2017-07-27 61 views
0

這是我的模型:爲什麼在我的sqlalchemy init中創建兩個對象?

class Category(db.Model): 
    __tablename__='category' 
    id = db.Column(db.Integer,primary_key=True) 
    items = db.relationship('Item',backref='category',lazy='dynamic') 
    name = db.Column(db.String(80)) 
    order = db.Column(db.Integer) 
    private = db.Column(db.Boolean) 
    color = db.Column(db.String(80),unique=False) 

    def __init__(self,name,order=None,private=None): 
     r = lambda: random.randint(0, 255) 
     color = (r(), r(), r()) 
     color = ('#%02X%02X%02X' % color) 
     count = db.session.query(Category).count() 
     print count 
     self.name = name 
     self.color = color 
     self.order = count+1 
     self.private = 1 

    def __repr__(self): 
     return '<Category %r>' % self.name 

,我在這裏創建表:

def initialize_tables(): 
    db.create_all() 
    c = Category(name="uncategorized") 
    db.session.add(c) 
    db.session.commit() 

if __name__ == '__main__': 
    initialize_tables() 
    app.run(debug=True) 

這就造成了兩個類別,我命名爲「未分類」數據庫。這是爲什麼發生?

回答

1

那是因爲你正在使用app.rundebug=True

如果調試標誌設置,服務器會自動重新加載代碼的修改並顯示調試器的情況下的異常發生。

的reloader的工作方式是通過在子進程重新啓動本身,因此if __name__ == '__main__'(因此initialize_tables)運行兩次。

+0

好酷。我會在哪裏放置我只想運行一次的代碼?就像我創建'未分類'類別時一樣? – BigBoy1337

+0

查看重複。 – davidism

+0

@ BigBoy1337重複問題的答案就像提到的大衛主義那樣,但對於您的具體情況,您可能不應該嘗試在服務器啓動時初始化數據庫,因爲無論如何,只要重新啓動服務器就可以運行多次你是否使用reloader。 – univerio

相關問題