尝试使用龙卷风设置rethinkDB连接并获取AttributeError:' Future'对象没有属性' _start'

时间:2015-12-09 10:50:22

标签: python tornado rethinkdb concurrent.futures

我正在尝试使用龙卷风设置rethinkDB。这是我的数据库设置 -

db_connection = r.connect(RDB_HOST,RDB_PORT) #Connecting to RethinkDB server 
This is just for cross-checking database and table exists 
def dbSetup():
    print PROJECT_DB,db_connection
    try:
        r.db_create(PROJECT_DB).run(db_connection)
        print 'Database setup completed.'
    except RqlRuntimeError:
        try:
            r.db(PROJECT_DB).table_create(PROJECT_TABLE).run(connection)
            print 'Table creation completed'
        except:
            print 'Table already exists.Nothing to do'
        print 'App database already exists.Nothing to do'
    db_connection.close()

但是db_create的try块抛出了一个AttributeError:' Future'对象没有属性' _start'。我无法弄清楚这里似乎有什么问题。

1 个答案:

答案 0 :(得分:0)

rethinkdb具有Tornado的本机异步客户端。您的问题是connect只返回应该解析的未来(yield) - 是异步的。而该对象Future没有像_start这样的东西,也没有像重新思考连接对象那样的东西。示例如何操作:

import rethinkdb as r
from tornado import ioloop, gen

r.set_loop_type("tornado")

@gen.coroutine
def dbSetup():
    db_connection = yield r.connect(RDB_HOST,RDB_PORT)
    yield r.db_create(PROJECT_DB).run(db_connection)
    print 'Database setup completed.'

tornado.ioloop.IOLoop.current().run_sync(dbSetup)

有关https://rethinkdb.com/blog/async-drivers/

的更多信息