从 Python 访问 OrientDB
Accessing OrientDB from Python
我想将一个>100万条记录的MySQL数据库转换成图数据库,因为它是重链接网络类型的数据。 Neo4J 的免费版本有一些我认为可能会遇到的限制,所以我安装了 OrientDB(Community 2.2.0)(在 Ubuntu Server 16.04 上)并让它工作。现在我需要从 Python (3.5.1+) 访问它,所以我正在尝试 pyorient (1.5.2)。 (我尝试了 TinkerPop,因为我最终想使用 Gremlin,但无法让 gremlin 控制台与 OrientDB 对话。)
以下简单的 Python 代码,用于连接到 OrientDB 中的一个测试图:
import pyorient
username="user"
password="password"
client = pyorient.OrientDB("localhost", 2424)
session_id = client.connect( username, password )
print("SessionID=",session_id)
db_name="GratefulDeadConcerts"
if client.db_exists( db_name, pyorient.STORAGE_TYPE_MEMORY ):
print("Database",db_name,"exists")
client.db_open( db_name, username, password )
else:
print("Database",db_name,"doesn't exist")
给出了一个奇怪的错误:
SessionID= 27
Database GratefulDeadConcerts exists
Traceback (most recent call last):
File "FirstTest.py", line 18, in <module>
client.db_open( db_name, username, password )
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/orient.py", line 379, in db_open
.prepare((db_name, user, password, db_type, client_id)).send().fetch_response()
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/messages/database.py", line 141, in fetch_response
info = OrientVersion(release)
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/otypes.py", line 202, in __init__
self._parse_version(release)
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/otypes.py", line 235, in _parse_version
self.build = int( self.build )
ValueError: invalid literal for int() with base 10: '0 (build develop@r79d281140b01c0bc3b566a46a64f1573cb359783; 2016'
有谁知道那是什么或者我该如何解决它?我真的应该改用 TinkerPop 吗?如果是这样,我会 post 一个单独的问题,关于我在这方面的挣扎。
我一开始就报错了,但是在升级 Pyorient 到最新版本 1.5.4 之后我就没有报错了。
$ python test.py
('SessionID=', 6)
('Database', 'GratefulDeadConcerts', 'exists')
$ python --version
Python 2.7.11
我想将一个>100万条记录的MySQL数据库转换成图数据库,因为它是重链接网络类型的数据。 Neo4J 的免费版本有一些我认为可能会遇到的限制,所以我安装了 OrientDB(Community 2.2.0)(在 Ubuntu Server 16.04 上)并让它工作。现在我需要从 Python (3.5.1+) 访问它,所以我正在尝试 pyorient (1.5.2)。 (我尝试了 TinkerPop,因为我最终想使用 Gremlin,但无法让 gremlin 控制台与 OrientDB 对话。)
以下简单的 Python 代码,用于连接到 OrientDB 中的一个测试图:
import pyorient
username="user"
password="password"
client = pyorient.OrientDB("localhost", 2424)
session_id = client.connect( username, password )
print("SessionID=",session_id)
db_name="GratefulDeadConcerts"
if client.db_exists( db_name, pyorient.STORAGE_TYPE_MEMORY ):
print("Database",db_name,"exists")
client.db_open( db_name, username, password )
else:
print("Database",db_name,"doesn't exist")
给出了一个奇怪的错误:
SessionID= 27
Database GratefulDeadConcerts exists
Traceback (most recent call last):
File "FirstTest.py", line 18, in <module>
client.db_open( db_name, username, password )
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/orient.py", line 379, in db_open
.prepare((db_name, user, password, db_type, client_id)).send().fetch_response()
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/messages/database.py", line 141, in fetch_response
info = OrientVersion(release)
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/otypes.py", line 202, in __init__
self._parse_version(release)
File "/home/tom/MyProgs/TestingPyOrient/env/lib/python3.5/site-packages/pyorient/otypes.py", line 235, in _parse_version
self.build = int( self.build )
ValueError: invalid literal for int() with base 10: '0 (build develop@r79d281140b01c0bc3b566a46a64f1573cb359783; 2016'
有谁知道那是什么或者我该如何解决它?我真的应该改用 TinkerPop 吗?如果是这样,我会 post 一个单独的问题,关于我在这方面的挣扎。
我一开始就报错了,但是在升级 Pyorient 到最新版本 1.5.4 之后我就没有报错了。
$ python test.py
('SessionID=', 6)
('Database', 'GratefulDeadConcerts', 'exists')
$ python --version
Python 2.7.11