我无法通过嵌入式Python绑定(neo4j / python- embedded,1.6版)使用neo4j图形数据库实现python Micro-Webframework Flask的最小工作示例。我所拥有的(基于Stack-Overflow-thread)是:
import os
import jpype
from neo4j import GraphDatabase
from flask import Flask, g
# configuration
DATABASE = 'graphdatabase'
DEBUG = True
SECRET_KEY = 'blubber'
USERNAME = 'tobias'
PASSWORD = 'bla'
ADMIN = 'admin'
app = Flask(__name__)
app.config.from_object(__name__)
def connectDB():
return GraphDatabase(app.config['DATABASE'])
def initDB():
db = connectDB()
with db.transaction:
users = db.node()
userIndex = db.node.indexes.create('users')
user = db.node(name=app.config['ADMIN'])
userIndex['name'][app.config['ADMIN']] = user
db.shutdown()
print "Database initialized."
@app.before_request
def before_request():
jpype.attachThreadToJVM()
g.db = connectDB()
@app.teardown_request
def teardown_request(exception):
jpype.attachThreadToJVM()
g.db.shutdown()
@app.route('/')
def index():
with g.db.transaction:
userIndex = g.db.node.indexes.get('users')
user = userIndex['name'][app.config['ADMIN']].single
username = user['name']
return render_template('index.html', name=username)
if os.path.exists(app.config['DATABASE']) == False:
initDB()
if __name__ == '__main__':
app.run()不幸的是,它抛出了:
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1518, in __call__
return self.wsgi_app(environ, start_response)
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1506, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1504, in wsgi_app
response = self.full_dispatch_request()
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1264, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1262, in full_dispatch_request
rv = self.dispatch_request()
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/flask/app.py", line 1248, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/tobias/Esk/Dev/adhocracyLight/adhocracyLight.py", line 73, in index
userIndex = g.db.node.indexes.get('users')
File "/home/tobias/Esk/Dev/adhocracyLight/venv/lib/python2.7/site-packages/neo4j/index.py", line 36, in get
return self._index.forNodes(name)
java.lang.RuntimeExceptionPyRaisable: java.lang.IllegalArgumentException: No index provider 'lucene' found. Maybe the intended provider (or one more of its dependencies) aren't on the classpath or it failed to load.我猜问题是由线程引起的(g是线程本地的,并且包含一个指向新4j数据库的指针,也许这是个坏主意?)
发布于 2012-06-03 01:39:41
Web不适合在Neo4j服务器环境中使用--您应该使用Neo4j服务器和Neo4j服务器客户端。
Bulbs (http://bulbflow.com)是一个Neo4j服务器客户端,它的设计考虑到了Flask,实际上bulbflow.com是运行在Neo4j上的Flask上,使用Bulbs Heroku插件(目前是免费的)。
您可以使用Gremlin或Cypher进行查询和事务性请求。
有关如何构建应用程序的示例,请参阅Lightbulb (https://github.com/espeed/lightbulb)博客示例,例如:
请注意bulbsconf.py中的这一行:
bulbs_config.set_neo4j_heroku()Lightbulb是为在带有Neo4j Heroku插件的Heroku上运行而设计的--如果您没有在Heroku上运行,请去掉这一行。
然后在您的Flask视图或app.py中执行以下操作:
from bulbsconf import graphhttps://stackoverflow.com/questions/10862188
复制相似问题