Python - 自动化MySQL索引:传递参数

时间:2010-01-08 23:02:41

标签: python mysql parameters automation

我有一个带有自动表索引代码的新改进版本的函数:

def update_tableIndex(self,tableName):
    getIndexMySQLQuery = """SELECT numberID
    FROM %s;""" % (tableName,)

    updateIndexMySQLQuery = """UPDATE %s 
    SET numberID=%s WHERE numberID=%s;""" % (tableName,)

    updateIndex=1
    self.cursorMySQL.execute(getIndexMySQLQuery)
    for row in self.cursorMySQL:
        indexID = row[0]
        self.cursorMySQL.execute(updateIndexMySQLQuery,(updateIndex,indexID))
        updateIndex+=1

虽然查询'getIndexMySQLQuery'可以正常使用这种语法,但另一个'updateIndexMySQLQuery'不起作用。

任何提示或建议如何解决这个问题?

我们非常感谢所有意见和建议。

3 个答案:

答案 0 :(得分:2)

第二个不起作用,因为您在查询字符串中使用了三个占位符,并且只为插值提供了一个变量。

updateIndexMySQLQuery = """UPDATE %s 
SET numberID=%%s WHERE numberID=%%s;""" % (tableName,)

这样,字符串格式化机制不会指望您提供3个值,因为百分号是“转义”的(对于第一个版本的答案,我感到羞耻)。

答案 1 :(得分:0)

使用%s替换开头的表名,但使用问号创建参数替换。

updateIndexMySQLQuery = """UPDATE %s 
SET numberID=? WHERE numberID=?;""" % (tableName,)
...
    self.cursorMySQL.execute(updateIndexMySQLQuery,(updateIndex,indexID))

答案 2 :(得分:0)

感谢您的意见。我只是重新做了整个功能。以下是它的工作方式和现状:

def update_tableIndex(self,tableName,indexName):

    getIndexMySQLQuery = """SELECT %s
    FROM %s;""" % (indexName,tableName,)

    updateIndex=1
    self.cursorMySQL.execute(getIndexMySQLQuery)
    for row in self.cursorMySQL:
        indexID = row[0]

        updateIndexMySQLQuery = """UPDATE %s 
        SET %s=%s WHERE 
        %s=%s;""" % (tableName,
                     indexName,updateIndex,
                     indexName,indexID)

        self.cursorMySQL.execute(updateIndexMySQLQuery)
        updateIndex+=1

因此,唯一要做的就是将列名和表名作为参数通知。它允许重用数据库中所有其他表的代码。

希望这对其他人也有用。