【发布时间】:2015-08-18 07:13:08
【问题描述】:
我需要在后端使用金字塔和 cassandra 开发 Web 应用程序。我已经在谷歌上搜索到了如何在金字塔中配置 cassandra(使用炼金术脚手架)。但是,我找不到太多相同的细节。根据我的搜索,我发现无法使用炼金术配置 NoSQL 类数据库。有没有办法将 cassandra 与金字塔集成。
【问题讨论】:
标签: python python-2.7 cassandra sqlalchemy pyramid
我需要在后端使用金字塔和 cassandra 开发 Web 应用程序。我已经在谷歌上搜索到了如何在金字塔中配置 cassandra(使用炼金术脚手架)。但是,我找不到太多相同的细节。根据我的搜索,我发现无法使用炼金术配置 NoSQL 类数据库。有没有办法将 cassandra 与金字塔集成。
【问题讨论】:
标签: python python-2.7 cassandra sqlalchemy pyramid
您只需要在应用程序启动时连接到您的 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')
【讨论】:
目前无法将 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')
它将经历整个过程:创建集群,定义连接,连接,执行语句和关闭集群。 我想知道这是否是更好的方法...
【讨论】: