Python - автоматизация индекса MySQL: передача параметра - PullRequest
1 голос
/ 09 января 2010

У меня есть функция с новой улучшенной версией кода для автоматической индексации таблиц:

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 ]

2 голосов
/ 09 января 2010

Второй не работает, потому что вы используете три заполнителя внутри строки запроса и предоставляете только одну переменную для интерполяции.

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

Таким образом, механизм форматирования строк не ожидает, что вы предоставите 3 значения, поскольку знаки процента "экранированы" (позор для меня за первую версию ответа).

0 голосов
/ 09 января 2010

спасибо за ввод. Я только что сделал всю функцию. Вот как это работает и выглядит сейчас:

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

Итак, единственное, что нужно сделать, это сообщить имя столбца и имя таблицы в качестве параметров. Позволяет повторно использовать код для всех других таблиц в базе данных.

Надеюсь, это может быть полезно и для других.

0 голосов
/ 09 января 2010

Используйте% s для замены имени таблицы в начале, но используйте вопросительный знак для создания замены параметра.

updateIndexMySQLQuery = """UPDATE %s 
SET numberID=? WHERE numberID=?;""" % (tableName,)
...
    self.cursorMySQL.execute(updateIndexMySQLQuery,(updateIndex,indexID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...