2015-06-03 91 views
2

我有要求在後端開發一個使用金字塔和cassandra的web應用程序。我已經足夠搜索瞭解如何在金字塔中配置cassandra(使用鍊金術腳手架)。但是,我無法找到相同的細節。根據我的搜索,我發現使用鍊金術來配置NoSQL類數據庫是不可能的。有沒有什麼方法可以將cassandra與金字塔結合起來。如何使用SQLAlchemy配置Cassandra與金字塔?

回答

0

你只需要連接到您的卡桑德拉集羣應用程序啓動並註冊在請求中的會話:

app.models.__init__.py

def includeme(config): 
    def get_session(): 
     from cassandra.cluster import Cluster 
     cluster = Cluster('your.cluster.ip') 
     return cluster.connect() 
    config.add_request_method(
     lambda request: get_session, 
     'dbsession', 
     reify=True) 

應用.__ init__:

def main(global_config, **settings): 
    config = Configurator(settings=settings) 
    config.include('app.models') 

然後你可以在你的視圖中使用cassandra會話通過調用request.dbsession,例如是這樣的:
request.dbsession.execute('SELECT name, email FROM users')

0

在使用的SQLAlchemy與卡桑德拉此刻是不可能原因SQLAlchemy的生成SQL代碼和卡桑德拉查詢建立CQL

關於將金字塔與Cassandra數據庫連接我有一個類似於@matino發佈的例子,但也包含一個完成的回調,因此所有連接都在請求結束時關閉。我app.__init__.py

例子:

from cassandra.cluster import Cluster 
from cassandra.io.libevreactor import LibevConnection 

def main(global_config, **settings): 
    """ 
    ... MORE CONFIG CODE ... 

    """ 

    # Retrieves connection to Cassandra (Non SQL database) 
    def get_cassandra(request): 
    cluster = Cluster(['127.0.0.1'], port=9042) 
    cluster.connection_class = LibevConnection 
    def disconnect(request): 
     cluster.shutdown() 
    session = cluster.connect('app') 
    session.row_factory = dict_factory 
    request.add_finished_callback(disconnect) 
    return session 


    config.add_request_method(get_cassandra, 'cassandra', reify=True) 

    """ 
    ... MORE CONFIG CODE ... 

    """ 

這當然工作雖然說實話,我不知道這是最好的方案,因爲每一次我們執行語句:

request.cassandra.execute('SELECT * FROM users') 

它將經歷整個過程:創建集羣,定義連接,連接,執行語句和關閉集羣。 我不知道這是否是更好的方法...