2016-03-03 208 views
0

我是一個Python/Flask/SQLAlchemy的初學者,所以很抱歉,如果我的問題是愚蠢的。Flask-Sqlalchemy多個數據庫(綁定)與相同的模型(類DB.Model)

我想創建與使用燒瓶SQLAlchemy的如下瓶的API:爲用戶/密碼

  1. 一個SQLite數據庫

SQLALCHEMY_DATABASE_URI =「源碼:////路徑/要/users.db」

class User(DB.Model): 
    __tablename__ = 'users' 
    id = DB.Column(DB.Integer, primary_key=True) 
    username = DB.Column(DB.String(64), index=True) 
    password = DB.Column(DB.String(128)) 
  • 可以說我有多個 「客戶」 女巫用戶可以創建我們荷蘭國際集團

    $ HTTP POST http://localhost:5000/api/customers/名= customer1表

    我想有這樣一個模型:

    類CustomerModel(DB.Model):

    __tablename__ = 'customer' 
    customer_id = DB.Column(DB.Integer, primary_key=True) 
    customer_name = DB.Column(DB.String, unique=True, index=True) 
    
  • 我需要創建一個單獨的sqlite文件(例如:customer1.db)爲每個「客戶」,所以我會:

    SQLALCHEMY_BINDS = { 
        'customer1' = 'sqlite:////path/customer1.db', 
        'customer2' = 'sqlite:////path/customer2.db', 
        ... 
    } 
    

    我的問題是:

    1. 我沒有固定的「客戶」的數量,所以我不能爲每個模型類,並指定「bind_key」每個。是否可以用Flask-SQLAlchemy來做到這一點,或者我需要使用普通的SQLAlchemy?

    2. 可以說我在數據庫中有3個「客戶」,如customer1.db,customer2.db和customer3.db。 我會啓動應用程序並創建SQLALCHEMY_BINDS字典列出data /中的文件,然後DB.create_all()。

    對特定「客戶」的請求如何使用Flask-SQLAlchemy DB.session綁定到正確的.db文件?我已經看到了這一點,但沒有答案,我找不到辦法。 Using different binds in the same class in Flask-SQLAlchemy

    回答

    1

    爲什麼要爲每個客戶完全分離DB文件?

    在任何情況下,使用直接SQLAlchemy都會更容易。你可以創建一個getter函數,它返回一個指向你的db文件的會話。

    def get_session(customer_id): 
        sqlite_url = 'sqlite:////path/customer%s.db' % customer_id 
        engine = create_engine(sqlite_url) 
    
        # initialize the db if it hasn't yet been initialized 
        Base.metadata.create_all(engine) 
    
        Session = sessionmaker(bind=engine) 
        session = Session() 
    
        return session 
    

    然後,您可以使用並關閉該會話。

    但是不知道你的具體用例,很難理解你爲什麼想這樣做,而不是僅僅使用一個SQLite數據庫。

    +0

    嗨jumbopap和謝謝你的答案。這個應用程序將用於不同的網站連接到一些服務器,並獲得一些數據。這個應用程序也將被幾個人用來查看數據(1分貝),並與其他數據(其他數據庫)進行比較。只需複製數據庫文件並將其放在我的數據庫目錄中,應用程序就可以工作。我最終可能會有100分貝的文件。 –

    +0

    我是SQLAlchemy的新手,並沒有看到使用Flask-SQLAlchemy的優勢,但我確定我想使用它的paginate。我不確定我可以用你的方法使用它嗎? –

    +0

    您所說的一切都可以在使用關係模式的單個數據庫文件中更輕鬆地完成,但您可以輕鬆完成。 普通SQLAlchemy沒有附帶分頁,但您可以輕鬆地從Flask-SQLAlchemy源中添加該類。 – jumbopap

    相關問題