2012-07-02 2 views
4

у меня есть 1048 строк данных CSV мне нужно прочитать в данных выглядит следующим образом:НАГРУЗКИ INFILE DATA не загружает все мои данные

\N,Olenevka,Оленевка,2596 
\N,Urzuf,Урзуф,2904 
\N,Lebedyn,ЛЕБЕДИН,27695 
\N,Staryy Dobrotvor,Staryy Dobrotvor,6436 

Вот таблица:

+------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+------------+------------------+------+-----+---------+----------------+ 
| city_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| name  | text    | YES |  | NULL |    | 
| alt_name | text    | YES |  | NULL |    | 
| population | int(10) unsigned | NO |  | NULL |    | 
+------------+------------------+------+-----+---------+----------------+ 

Вот код:

db.query(""" 
    LOAD DATA INFILE '%s' 
    INTO TABLE %s 
    CHARACTER SET utf8 
    FIELDS TERMINATED BY ',' 
    (@skip, name, alt_name, population) 
    """ % (temp_file, table)) 

class Database(object): 
    def __init__(self, database): 
     self.database = database 
    def query(self, cmd): 
     return subprocess.call(['mysql -u root -e "%s" %s' % (cmd, self.database)], shell=True) 

Когда я выполняю команду из питона, он читает только в 1025 строк. Но если я выдаю ту же команду из приглашения mysql, я получаю их все.

Вот последние строки из SELECT * после выполнения кода:

| 1023 | Alchevs’k  | Алчевск        |  116000 | 
| 1024 | Yakymivka  | Якимівка       |  12353 | 
| 1025 | Okhtyrka   | Охтирка        |  49818 | 
| 1026 | Adzhamka   | А         |   0 | 
+---------+------------------+-------------------------------------+------------+ 

Последняя строка только частично читать. Вот остальная часть файла.

\N,Okhtyrka,Охтирка,49818 
\N,Adzhamka,Аджамка,3859 
\N,Malynivka,Малинівка,7502 
\N,Mykhaylivka,Mykhaylivka,3352 
\N,Kopashnovo,Копашново,3010 
\N,Narkevychi,Наркевичі,1631 
\N,Kirove,Кірове,3291 
\N,Orikhove,Оріхове,3000 
\N,Krasni Okny,Красні Окни,5461 
\N,Pavlivka,Pavlovka,738 
\N,Kuchurhan,Кучурган,3183 
\N,Smyga,Смыга,2800 
\N,Tayirove,Таїрове,1849 
\N,Teplodar,Теплодар,8502 
\N,Komsomolsk,Комсомольськ,51740 
\N,Славутич,Славутич,25000 
\N,Розгирче,Розгирче,566 
\N,Orzhiv,Оржів,4125 
\N,Shkil’ne,Шкільне,2127 
\N,Denyshi,Деныши,1164 
\N,Chetfalva,Четфалва,755 
\N,Stepove,Степовое,1549 
\N,Scholkine,,11677 
\N,Yuzhnoukrains'k,Южноукраїнськ,39430 

Идеи?

ответ

0

Попробуйте положить обратную косую черту в конце каждой строки, например:

db.query("""\ 
    LOAD DATA INFILE '%s' \ 
    INTO TABLE %s \ 
    CHARACTER SET utf8 \ 
    FIELDS TERMINATED BY ',' \ 
    (null, name, alt_name, population) \ 
    """ % (temp_file, table)) 

Если это не сработает, попробуйте отключить обработку оболочки из «subprocess.call» вызова.

Например:

оболочки = False

Смежные вопросы