扭曲的adbapi fetchone

时间:2015-08-30 23:57:56

标签: twisted

如果我使用Twisted的adbapi的runInteraction,并且在我调用的函数中我做了类似的事情

curs. execute("SELECT id FROM mytable WHERE name='bob'")
id = curs.fetchone()[0]

我是否保证此选择的id或者是否来自其他延迟线程之一?

1 个答案:

答案 0 :(得分:0)

延迟是线程安全的,因此您可以得到保证。

示例代码看起来像:

def _getAge(txn, user):
    # this will run in a thread, we can use blocking calls
    txn.execute("SELECT * FROM foo")
    # ... other cursor commands called on txn ...
    txn.execute("SELECT age FROM users WHERE name = ?", user)
    result = txn.fetchall()
    if result:
        return result[0][0]
    else:
        return None

def getAge(user):
    return dbpool.runInteraction(_getAge, user)

def printResult(age):
    if age != None:
        print age, "years old"
    else:
        print "No such user"

getAge("joe").addCallback(printResult)

来自官方docs。我没有删除任何更清晰和教学的行。