如何在Python中一次执行列表中的多查询?

时间:2016-10-05 11:20:04

标签: python postgresql tornado

我正在使用Tornado和Postgres,我有一些查询(4或5),我在程序中附加到列表中,现在我想一次执行所有这些查询!

当我尝试执行时出现错误:

"DummyFuture does not support blocking for results" 

我执行了这段代码:

 yield self.db.execute(''.join(queries)).result() 

“查询”是查询列表!

这是我的连接池和Tonado设置:

ioloop = IOLoop.instance()

application.db = momoko.Pool(
    dsn='dbname=xxx user=xxx password=xxxx host=x port=xxxx'
    size=xx,
    ioloop=ioloop,
)

# this is a one way to run ioloop in sync
future = application.db.connect()
ioloop.add_future(future, lambda f: ioloop.stop())
ioloop.start()
future.result()  # raises exception on connection error

http_server = HTTPServer(application)
http_server.listen(8888, 'localhost')
ioloop.start()

1 个答案:

答案 0 :(得分:0)

不要在Tornado协程中的Future上调用result()。得到这样的结果:

@gen.coroutine
def method(self):
    result = yield self.db.execute('...')

另外,我认为将查询作为字符串加入并不起作用。结果将不是有效的SQL。代替:

@gen.coroutine
def method(self):
    results = yield [self.db.execute(q) for q in queries]