Twisted 및 runQuery를 사용하여 Oracle에서 일부 데이터를 가져 오려고 시도하고 실제 데이터 대신 지연된 데이터를 계속 가져 오려고합니다. 어떻게 해결할 수 있습니까? 일부 코드 (I는 불필요한 부분을 제외하지만, 아이디어가 명확해야한다) : 그 중요한 경우Twisted 및 Oracle이있는 데이터 대신 dbpool.runQuery에서 연기받습니다.
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)
나는, 다른 모듈 원자로 운전을 얻었다. 미리 감사드립니다.
UPDATE : @의 도움으로 데이터를 반환 코드를 작업 대신 파이썬 3.5 이연있어 notorious.no :
당신은 항상 이연 반환하는inlineCallback
를 호출하고 있기 때문에 당신이 이연받을
@defer.inlineCallbacks
def ask_db(request):
data = yield dbpool.runQuery(request)
return defer.returnValue(data)
당신은 .. 당신의 ask_db 함수에서 아무것도 반환하지 않습니다, 무슨는 어떻게됩니까? – James
ask_db()를 의미합니까? data = yield dbpool.runQuery ("SELECT * FROM customer") print (data)? 그렇다면 아무것도 변경되지 않습니다. –