2010-04-26 20 views
14

Estoy tratando de cargar un archivo de datos en la tabla mysql usando "LOAD DATA LOCAL INFILE 'nombre de archivo' INTO TABLE 'tablename'".mysql LOAD DATA INFILE con autoincremento de la clave principal

El problema es que el archivo de datos de origen contiene datos de todos los campos, pero falta la clave principal (columna 'id'). Añado un campo de identificación único mientras creo la base de datos, pero ahora necesito importar los datos en la tabla comenzando desde el siguiente campo y aumentar automáticamente el campo de id. Al importar.

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


        ) 
        """) 

aquí es mi carga de consulta

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

alguna idea?

Resumen: crear una tabla con un campo de ID adicional que se auto incremento datos de carga (20 columnas) en la tabla de 21 campos saltarse el campo id dejar que el campo id rellenar automáticamente con un índice de incremento automático.

Respuesta

20

especificar una lista de columna:

Por defecto, cuando no se proporciona ninguna lista de columnas al final de la instrucción LOAD DATA INFILE, se espera que las líneas de entrada para contener un campo para cada columna de la tabla. Si desea cargar solamente una de las columnas de una tabla, especifique una lista de columnas:

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

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

+0

¿Existe una manera fácil de enumerar los 20 nombres de columna que pueden ser como una notación de lista [1:]? ¿O debo escribir el nombre de cada columna como study_no, family_no, etc.? gracias – biomed

+0

la lista de columnas debe estar al final y la columna id debe tener un set = null para autoincrementarse – biomed

+1

Para agregar los nombres de columna, debe poder hacer: cursor.execute ("DESCRIBE tablename"); query = "LOAD DATA INFILE 'data.txt' INTO TABLE tablename (% s)"% ',' .join ([x [0] para x en cursor.fetchall()] [1:]) – Aaron

0

la lista de columnas deben estar en la columna de la final y la identificación muy debe tener un conjunto = nulo para ser auto incrementado - desafortunadamente la documentación de mysql es muy vaga. simplemente dicen col1, col2, pero están en el archivo fuente o en la tabla dest. Esta página ayudó mucho con ejemplos claros.

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

+2

expert-exchange requires una suscripción paga para acceder a cualquier discusión en su sitio; al hacer referencia, por favor copie y pegue y añada el atributo – Alvin

+0

, sí ... un enlace de trabajo ayudaría. Este no es solo un sitio pago, sino que la página está rota. – lcm

0

utilizar la siguiente consulta en caso de que el registro csv es así

"21231", "234424", "Mi categoría", "1" DATOS

carga local INFILE 'C: /wamp/www/cakephp/app/webroot/files/product_catalogs/categories.csv' EN gatos Tabla Campos TERMINATED BY '' ADJUNTO BY '"' LÍNEAS TERMINATED BY '\ r \ n' (category_id, p arent_id, category, is_leaf)

Lo he hecho con éxito. :)

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) 

Esto es en caso de ubuntu

1

su archivo de datos debe tener este aspecto: nula, caracteres de estudio, otros campos ... MySQL insertará Istead ID incrementando de null

Cuestiones relacionadas