Проблема с Python и MySQL - PullRequest
       26

Проблема с Python и MySQL

1 голос
/ 24 мая 2011

Я пытаюсь импортировать большой текстовый файл в базу данных MySQL. Инструкция SQL выглядит следующим образом:

LOAD DATA INFILE '/tmp/epf/full/album_popularity_per_genre' 
INTO TABLE album_popularity_per_genre 
CHARACTER SET UTF8 FIELDS TERMINATED BY X'01' LINES TERMINATED BY '\n' 
IGNORE 45 LINES (export_date, storefront_id, genre_id, album_id, album_rank)

Вышеописанное работает, когда я запускаю его в phpMyAdmin, однако, когда я пишу простую функцию на Python, которая использует приведенный выше оператор SQL, я получаю сообщение об ошибке.

Вот код Python,

def test():
    dbConnection = MySQLdb.connect(
    charset='utf8', 
    host='localhost', 
    user='root', 
    passwd='root', 
    db='epf')

    cursor = dbConnection.cursor()

    exStr = """LOAD DATA INFILE '/tmp/epf/full/album_popularity_per_genre' 
               INTO TABLE album_popularity_per_genre CHARACTER SET UTF8 
               FIELDS TERMINATED BY X'01' LINES TERMINATED BY '\n' 
               IGNORE 45 LINES 
               (export_date, storefront_id, genre_id, album_id, album_rank)"""

    try:
        cursor.execute(exStr)
    except MySQLdb.Warning, e:
        print "Warning %s" % (str(e))
    except MySQLdb.IntegrityError, e:     
        print "Error %d: %s" % (e.args[0], e.args[1])

    #Clean up
    cursor.close()
    dbConnection.close()

Я получаю следующую ошибку:

Warning Data truncated for column 'album_rank' at row 1

Теперь у меня вопрос: почему работает сырой оператор SQL, но когда я пытаюсь запустить код Python, данные не импортируются в базу данных?

1 Ответ

2 голосов
/ 24 мая 2011

DBAPI Python неявно транзакционный.Попробуйте добавить dbConnection.commit() после выполнения.

...