如何使用SQLAlchemy配置带金字塔的Cassandra?

时间:2015-06-03 21:15:48

标签: python python-2.7 cassandra sqlalchemy pyramid

我需要在后端使用金字塔和cassandra开发Web应用程序。我用google搜索了如何在金字塔中配置cassandra(使用炼金术脚手架)。但是,我找不到相同的细节。根据我的搜索,我发现使用alchemy配置NoSQL类数据库是不可能的。有没有办法将cassandra与金字塔结合起来。

2 个答案:

答案 0 :(得分:0)

您只需在应用程序启动时连接到您的cassandra集群并在请求中注册会话:

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)

app .__ init __:

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

然后,您可以通过调用request.dbsession在视图中使用cassandra会话,例如: request.dbsession.execute('SELECT name, email FROM users')

答案 1 :(得分:0)

目前使用SQLAlchemy与Cassandra是不可能的因为SQLAlchemy生成SQL代码并且Cassandra查询是在CQL中构建的。

关于将Pyramid与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')

它将完成整个过程:创建集群,定义连接,连接,执行语句和关闭集群。 我想知道这是否是更好的方法......