2010-04-26 16 views
14

Próbuję załadować plik danych do tabeli mysql przy użyciu "LOAD DATA LOILAL INFILE" filename "INTO TABLE" tablename "".mysql LOAD DATA INFILE z automatycznie kluczowym kluczem podstawowym

Problem polega na tym, że plik danych źródłowych zawiera dane wszystkich pól, ale brakuje klucza podstawowego (kolumna "identyfikator"). Dodaję unikatowe pole id podczas tworzenia bazy danych, ale teraz muszę zaimportować dane do tabeli, poczynając od następnego pola i automatycznie zwiększając pole id podczas importowania.

def create_table(): 
      cursor.execute (""" 
        CREATE TABLE variants 
        (
        id integer(10) auto_increment primary key, 
        study_no CHAR(40), 
        other fields..... 


        ) 
        """) 

tu jest mój kwerendy LOAD

query1= "LOAD DATA LOCAL INFILE '"+currentFile+"' INTO TABLE variants FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n'" 

jakieś pomysły?

Podsumowanie: utworzyć tabelę z dodatkowym polu id że auto przyrost ładowania danych (20 kolumn) do tabeli z 21 pola omijając pole id Lot pole id automatycznie wypełniać z indeksem automatycznego przyrostu.

Odpowiedz

20

Określa listę kolumna:

Domyślnie, gdy żadna lista kolumna jest umieszczony na końcu instrukcji LOAD DATA plik_we, spodziewane są linie wejściowe zawiera pole dla każdej kolumny tabeli. Jeśli chcesz, aby załadować tylko niektóre z kolumn tabeli, określić listę kolumna:

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

+0

czy istnieje prosty sposób wyświetlania wszystkich 20 nazw kolumn, może być jak notacja listy [1:]? Czy muszę wpisać nazwę każdej kolumny, np. Study_no, family_no itp.? dzięki – biomed

+0

lista kolumn musi znajdować się na samym końcu, a kolumna id musi mieć wartość = null, aby była automatycznie zwiększana – biomed

+1

Aby dodać nazwy kolumn, powinieneś być w stanie: cursor.execute ("DESCRIBE tablename"); query = "LOAD DATA INFILE" data.txt "DO TABELI nazwa tabeli (% s)"% "," .join ([x [0] dla x in cursor.fetchall()] [1:]) – Aaron

0

lista kolumna musi być na końcu i id kolumny samym musi posiadać zestaw = null to auto incremented - Niestety dokumentacja mysql jest bardzo niejasna. one justt powiedz col1, col2, ale są one w pliku źródłowym lub w tabeli dest. Ta strona pomogła wiele dzięki wyraźnym przykładom.

http://www.experts-exchange.com/articles/Database/MySQL/Load-Delimited-Data-into-MySQL-Server.html

+2

wymaga wymiany ekspertów płatna subskrypcja umożliwiająca dostęp do wszelkich dyskusji na swojej stronie - podczas tworzenia odnośników skopiuj i wklej i atrybut – Alvin

+0

tak ... pomocne może być działające łącze. Ten jest nie tylko płatną stroną, ale strona jest zepsuta. – lcm

0

Użyj następującego zapytania w przypadku rekordu CSV jest, że jak

"21231", "234424", "My Category", "1" DATA

LOAD LOCAL plik_we 'C: /wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' do tabeli kotów Fields przez '' zamkniętych BY '"' LINII przez '\ r \ n' (category_id, p arent_id, category, is_leaf)

Zrobiłem to z powodzeniem. :)

3
LOAD DATA LOCAL INFILE '/var/www/.........../file.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' (field1,field2,.........,fieldn) 

to w przypadku ubuntu

1

plik danych powinien wyglądać następująco: null, badania znaków, pozostałe pola ... MySQL wstawi zwiększane id istead null

Powiązane problemy