以下在Jenkins中执行烧瓶应用程序的上下文中运行时起作用:
将一个函数从一个文件导入另一个文件:
def return_countries(db):
db.session.expire_on_commit = False
q = db.session.query(Country.countrycode).distinct().all()
q = [t[0] for t in q]
return q
在导入文件的内部,我这样称呼它:
print(return_countries(db))
当这个工作在Jenkins运行时,它没有问题。
问题是,我想要一个数据库调用,然后多次使用返回的国家/地区代码列表,而不是不必要继续查询相同的事情。为了保持整洁,试图把它放在课堂上。是的,它可以在没有类的情况下完成,但可能需要在代码库的几个部分中,可能需要使用其他方法,因此如果类可以工作则会更清晰。
所以我注释掉了这个函数定义并将以下类插入到一个文件中:
class checkCountries:
def __init__(self, db):
db.session.expire_on_commit = False
__q = db.session.query(Country.countrycode).distinct().all()
__q = [t[0] for t in __q]
print(__q)
def check(self, __q, countrycode):
if countrycode in __q:
return True
else:
return False
...更新了另一个文件中的import语句,并直接在import语句下实例化:
cc = checkCountries(db)
并用以下内容替换了上面的print语句:
print('check for DE: ', cc.check('DE'))
print('check for ES: ', cc.check('ES'))
print('check for GB: ', cc.check('GB'))
但是它在Jenkins日志中生成了一个错误。回溯很长,但下面可能是相关的摘录。
有什么想法吗?我对__q
/python3.6/site-packages/sqlalchemy/util/_collections.py", line 988, in __call__
15:26:01 return self.registry[key]
15:26:01 KeyError: 123456789123456
15:26:01
15:26:01 During handling of the above exception, another exception occurred:
15:26:01
15:26:01 Traceback (most recent call last):
/python3.6/site-packages/flask_sqlalchemy/__init__.py", line 922, in get_app
15:26:01 raise RuntimeError('application not registered on db '
15:26:01 RuntimeError: application not registered on db instance and no application bound to current context
15:26:02 Build step 'Execute shell' marked build as failure
15:26:02 Finished: FAILURE
答案 0 :(得分:0)
我得到了它的工作,所以这是我正在使用的类现在有效:
class checkCountries:
def __init__(self, db, app):
db.init_app(app)
with app.app_context():
db.session.expire_on_commit = False
self.__q = db.session.query(Country.countrycode).distinct().all()
self.__q = [t[0] for t in self.__q]
print(self.__q)
def check(self, countrycode):
if countrycode in self.__q:
return True
else:
return False
然后,实例化它的行现在需要2个参数:
cc = checkCountries(db, app)
其余部分与上述问题相同。
来自This answer的@mark_hildreth帮助了,谢谢!
是的,它有不止一件事。该类不是很正确,但在简化的应用程序中进行了调试并使其正常工作但是sqlalchemy特有的此错误消息仍然存在。
可能它与类中的变量有关,与阻止它绑定到Flask application context
的函数有关。