2012-07-20 50 views
0

我想在我没有root权限的计算机上运行python脚本。为此,我使用Python 2.7创建了一个virtualenv,然后添加了我需要并行Python和SQLAlchemy的两个包。当我运行该脚本,我得到这个错误:在virtualenv SQLAlchemy错误

(virtPython)thaddeus:recipes ab940$ python2.7 matchIngsParallel.py 
Starting pp with 8 workers 
Reading ingredients into dictionary 
Traceback (most recent call last): 
    File "matchIngsParallel.py", line 65, in <module> 
    for synonym, parentIng in session.query(IngSyn.synonym, IngSyn.parentIng): 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/query.py", line 2227, in  __iter__ 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/query.py", line 2242, in  _execute_and_instances 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1449, in execute 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1698, in _execute_context 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/base.py", line 1691, in _execute_context 
    File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/engine/default.py", line 331, in do_execute 
sqlalchemy.exc.OperationalError: (OperationalError) no such table: ingSyns u'SELECT  "ingSyns".synonym AS "ingSyns_synonym", "ingSyns"."parentIng" AS "ingSyns_parentIng" \nFROM  "ingSyns"'() 

它好像一切都被正确导入但数据库没有被正确访问。

的脚本如下:

from assignDB import * 
from sqlalchemy.orm import sessionmaker 
import pp, sys 

ppservers =() 

job_server = pp.Server(ppservers=ppservers) 

print "Starting pp with", job_server.get_ncpus(), "workers" 

print "Reading ingredients into dictionary" 
ingreds = {} 
for synonym, parentIng in session.query(IngSyn.synonym, IngSyn.parentIng): 
    ingreds[synonym] = parentIng 
print "Finished reading ingredients" 

(该代码被缩短,但包括其中发生错误的地方)

assignDB看起来像这样:

from sqlalchemy import Column, Integer, String, ForeignKey, create_engine, Table 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship, backref, sessionmaker 
from sqlalchemy.dialects.sqlite import DATETIME, REAL 

engine = create_engine('sqlite:///recDB.db') 
Session = sessionmaker(bind=engine) 
session = Session() 
Base = declarative_base() 

随后类定义。

我试过这个脚本在其他计算机上(我有root权限,但是),包括其他virtualenvs,它工作正常。我很困惑会发生什么问题!

回答

1

您的脚本可以访问数据库,但似乎没有表格。我想你从另一台机器复制了脚本,你是否也复制了SQLite数据库文件recDB.db

+0

是的,我正在访问一个保管箱文件夹,所以它在所有机器上都是一样的。我认为virtualenv调用导入的方式存在一些问题,特别是'assignDB'?如果它在创建引擎时找不到数据库,它会不会传递错误? – abroekhof 2012-07-20 13:30:28

+0

如果SQLite驱动程序找不到该文件,它会创建它,因此您不会在那里看到错误。 ''sqlite:/// recDB.db''是一个相对于你当前工作目录的路径,我想你在启动你的python外壳之后,进入dropbox文件夹?你的'assignDB'导入成功了,否则你的脚本的第一行会出现'ImportError'。是什么让你认为这是一个进口问题? – Simon 2012-07-20 16:16:37