【发布时间】:2016-10-04 16:57:56
【问题描述】:
我正在尝试使用 Twisted 和 runQuery 从 Oracle 获取一些数据,并不断获取 Deferred 而不是实际数据。 如何解决? 一些代码(我排除了一些不必要的部分,但思路应该很清楚):
from twisted.enterprise import adbapi
from twisted.internet import defer
import service_config
ORACLE_DSN = service_config.oracle_dsn
ORACLE_USER = service_config.oracle_user
ORACLE_PASSWORD = service_config.oracle_password
dbpool = adbapi.ConnectionPool('cx_Oracle',
user=ORACLE_USER,
password=ORACLE_PASSWORD,
dsn=ORACLE_DSN, port='49161')
@defer.inlineCallbacks
def ask_db():
data = yield dbpool.runQuery("SELECT * FROM customer")
a = ask_db()
print(a)
我让反应堆在其他模块中运行,如果这很重要的话。 提前谢谢你。
更新: 在@notorious.no 的帮助下,得到了工作代码,返回数据而不是 Python 3.5 的延迟:
@defer.inlineCallbacks
def ask_db(request):
data = yield dbpool.runQuery(request)
return defer.returnValue(data)
【问题讨论】:
-
您没有从 ask_db 函数返回任何内容。如果您将 print(a) 更改为 ask_db 中的 print(data),那么会发生什么?
-
你的意思是 def ask_db(): data = yield dbpool.runQuery("SELECT * FROM customer") print(data)?如果是,则没有任何变化。
标签: python oracle twisted deferred