我需要在后端使用金字塔和cassandra开发Web应用程序。我用google搜索了如何在金字塔中配置cassandra(使用炼金术脚手架)。但是,我找不到相同的细节。根据我的搜索,我发现使用alchemy配置NoSQL类数据库是不可能的。有没有办法将cassandra与金字塔结合起来。
答案 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')
它将完成整个过程:创建集群,定义连接,连接,执行语句和关闭集群。 我想知道这是否是更好的方法......