Этот код пишет только одну строку в БД? - PullRequest
1 голос
/ 13 февраля 2012

Этот код записывает только одну строку в БД

Я не нахожу ошибки в этом коде. , .

Но почему это не вставить больше, чем первый ряд?

def transremovechars():
    cur.execute('drop table transforms')
    char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed')      #Reads all the special chars to be removed from specialchars.txt#
    cur.execute('select * from originallist')
    for row in cur:                                                         #Applies transformation to remove chars for each row in a loop#
        company = row[0]
        for specialchars in char_cfg:
            company =  company.replace(specialchars, '')
        cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')')
    con.commit() 

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Вы забыли cur.fetchall():

def transremovechars():
    cur.execute('drop table transforms')
    char_cfg = config.get('Transform_Variables', 'Chars_to_be_removed')      #Reads all the special chars to be removed from specialchars.txt#
    cur.execute('select * from originallist')
    for row in cur.fetchall():                                                         #Applies transformation to remove chars for each row in a loop#
        company = row[0]
        for specialchars in char_cfg:
            company =  company.replace(specialchars, '')
        cur.execute('Insert into transforms (Transresult1) values (\'' + company + '\')')
    con.commit() 
1 голос
/ 13 февраля 2012

Комментарии о том, что вы должны cur.fetchall() и повторить, что будет работать и будет в порядке.Настоящая ошибка в вашем коде состоит в том, что после того, как вы используете cur для вставки, это «новая вещь» и исходный генератор сбрасывается (метод cur имеет next()).

Вы можете использовать curне делая fetchall, как вы хотели, просто создайте второй курсор ins_cur = con.curson() и используйте оба.Многие другие расширенные эффекты могут быть достигнуты путем итерации или использования нескольких курсоров, открытых на одном соединении.

И да, пожалуйста, используйте правильную привязку переменной для вашего модуля dbapi.

1 голос
/ 13 февраля 2012

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

Ваш select * может оказаться чрезмерным, если вы используете только 1-й столбец.Возможно, вы захотите назвать это поле в SELECT.

. Кроме того, вам следует заменить строку INSERT на

cur.execute('Insert into transforms (Transresult1) values (?)', company)

Однако итерация по курсору должна выполняться хорошо.Может быть, вы могли бы вставить некоторые операторы print в ваш цикл for ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...