0

我是 python 和网络编程的新手。我正在尝试将包含程序状态条目的数据库行与存储在磁盘中的程序状态同步。但是在数据库 hpartDirs 中,IS_FULL_PROCESSED 列没有得到更新。我启动了 python 解释器,但没有意识到我在这里做错了什么。函数调用 checkIsHpartProcessed(indexFile) 工作正常。

    import web 
    ..
    urls = ( 
    '/hpart/syncdb','hpartSyncDb'
    )
    db = web.database(dbn='mysql',\
                      user=<retracted>,\
                      pw=<retracted>,\
                      db='classifier',\
                      host='localhost')
    ..
    class hpartSyncDb:
            def GET(self):
                    hpartDirs = db.select('hpartDirs')
                    for hpart in hpartDirs:
                            indexFile=os.path.join(hpart.PATH,"index.hpart")
                            print "Updating "+indexFile+"with is hpart processed value"+str(temp) # Added just for debugging purposes
                            temp=checkIsHpartProcessed(indexFile)
                         db.update('hpartDirs',where='ID=$id',id=hpart.ID,IS_FULL_PROCESSED=temp)
                    raise web.seeother('/hpart/showdb')

这是解释器的示例输出

    Updating /opt/bs/yourfile.html.hpart/index.hpartwith is hpart processed value1
    0.0 (7): UPDATE hpartDirs SET IS_FULL_PROCESSED = '1', id = 1L WHERE ID = <built-in function id>
    0L
    Updating /opt/bs/pr?sid=2oq.hpart/index.hpartwith is hpart processed value-1
    0.0 (8): UPDATE hpartDirs SET IS_FULL_PROCESSED = -1, id = 2L WHERE ID = <built-in function id>

我在这里做错了什么我不明白,请帮忙。

4

1 回答 1

0

您不能直接通过 db.update 访问变量。

您必须在更新查询中使用vars=本地变量vars=locals()并使用 $variable 或指定字典vars={'id': 1, 'foo': 'bar'},如下所示。

 class hpartSyncDb:
            def GET(self):
                    hpartDirs = db.select('hpartDirs')
                    for hpart in hpartDirs:
                        indexFile=os.path.join(hpart.PATH,"index.hpart")
                        print "Updating "+indexFile+"with is hpart processed value"+str(temp)
                        temp=checkIsHpartProcessed(indexFile)
                        myvar={'id': hpart.id, 'isprocessed': temp} 
                        db.update('hpartDirs',where="ID=$id", IS_FULL_PROCESSED=$temp, vars=myvar)
                    raise web.seeother('/hpart/showdb')

我没有更新 ID,因为在更新期间似乎不应更改 ID。

于 2013-08-29T09:52:05.880 回答