PyDev报告不存在的导入错误。 最初的症状是虚假的“未解决的导入”错误,这些错误通过以下某种组合得到解决:
- 清理项目 - 重新索引项目(删除解释器,再次添加) - 重启Eclipse - 向Python神灵烧香
现在的错误是“来自导入的未经验证的变量”--似乎找不到pymssql.connect。
这不是PYHTONPATH问题。 我可以完全正常地访问模块,文件中带有(所谓的)错误的代码运行良好---它具有单元测试和生产代码调用它。
错误在PyDev中:我向我的PyDev项目添加了一个新模块,错误仅发生在新模块中。 我已经尝试了上述所有操作。
因此,我计划在其他地方发布此代码以征求有关设计的评论,并在评论中被要求发布代码。 (受启发于:Database connection wrapper和Clint Miller对此问题的回答:How do I correctly clean up a Python object?)。导入错误发生在第69行(self.connection = pymssql.connect ...)。 不确定这对回答问题有何好处,但...
- 清理项目 - 重新索引项目(删除解释器,再次添加) - 重启Eclipse - 向Python神灵烧香
现在的错误是“来自导入的未经验证的变量”--似乎找不到pymssql.connect。
这不是PYHTONPATH问题。 我可以完全正常地访问模块,文件中带有(所谓的)错误的代码运行良好---它具有单元测试和生产代码调用它。
错误在PyDev中:我向我的PyDev项目添加了一个新模块,错误仅发生在新模块中。 我已经尝试了上述所有操作。
因此,我计划在其他地方发布此代码以征求有关设计的评论,并在评论中被要求发布代码。 (受启发于:Database connection wrapper和Clint Miller对此问题的回答:How do I correctly clean up a Python object?)。导入错误发生在第69行(self.connection = pymssql.connect ...)。 不确定这对回答问题有何好处,但...
import pymssql
from util.require_type import require_type
class Connections(object):
@require_type('host', str)
@require_type('user', str)
@require_type('password', str)
@require_type('database', str)
@require_type('as_dict', bool)
def __init__(self, host, user, password, database, as_dict=True):
self.host = host
self.user = user
self.password = password
self.db = database
self.as_dict = as_dict
@staticmethod
def server1(db):
return Connections('','','','')
@staticmethod
def server2(db):
pass
@staticmethod
def server3(db):
pass
class DBConnectionSource(object):
# Usage:
# with DBConnectionSource(ConnectionParameters.server1(db = 'MyDB)) as dbConn:
# results = dbConn.execute(sqlStatement)
@require_type('connection_parameters', Connections)
def __init__(self, connection_parameters=Connections.server1('MyDB')):
self.host = connection_parameters.host
self.user = connection_parameters.user
self.password = connection_parameters.password
self.db = connection_parameters.db
self.as_dict = connection_parameters.as_dict
self.connection = None
def __enter__(self):
parent = self
class DBConnection(object):
def connect(self):
self.connection = pymssql.connect(host=parent.host,
user=parent.user,
password=parent.password,
database=parent.db,
as_dict=parent.as_dict)
def execute(self, sqlString, arguments={}):
if self.connection is None:
raise Exception('DB Connection not defined')
crsr = self.connection.cursor()
crsr.execute(sqlString, arguments)
return list(crsr)
def cleanup(self):
if self.connection:
self.connection.close()
self.connection = DBConnection()
self.connection.connect()
return self.connection
def __exit__(self, typ, value, traceback):
self.connection.cleanup()