2015-06-03 3 views
2

У меня есть требование разработать веб-приложение с использованием пирамиды и кассандры в задней части. Я достаточно искал Google, чтобы узнать, как настроить кассандру в пирамиде (используя алхимический эшафот). Но я не мог найти много деталей на том же самом. В соответствии с моим поиском я обнаружил, что невозможно настроить базы данных классов NoSQL с использованием алхимии. Есть ли способ интегрировать кассандру с пирамидой.Как настроить Cassandra с помощью Pyramid с помощью SQLAlchemy?

ответ

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') 

будет проходить весь процесс: создание кластера, определение соединения, подключение, выполнение инструкции и закрытие кластера. Интересно, если это лучший подход ...

Смежные вопросы