【问题标题】:How to configure Cassandra with Pyramid using SQLAlchemy?如何使用 SQLAlchemy 使用 Pyramid 配置 Cassandra?
【发布时间】:2015-08-18 07:13:08
【问题描述】:

我需要在后端使用金字塔和 cassandra 开发 Web 应用程序。我已经在谷歌上搜索到了如何在金字塔中配置 cassandra(使用炼金术脚手架)。但是,我找不到太多相同的细节。根据我的搜索,我发现无法使用炼金术配置 NoSQL 类数据库。有没有办法将 cassandra 与金字塔集成。

【问题讨论】:

    标签: python python-2.7 cassandra sqlalchemy pyramid


    【解决方案1】:

    您只需要在应用程序启动时连接到您的 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')

    【讨论】:

      【解决方案2】:

      目前无法将 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')
      

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

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 1970-01-01
        • 2013-02-20
        • 2015-04-20
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多