Importar .csv en una tabla SQLObject

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Importar .csv en una tabla SQLObject

Juan Pablo Valois Valencia
Saludos lista,

Estoy trabajando en un proyecto en el cual empleo SQLObject para manipular una base de datos en SQLite, pero aunque el comando .import existe en la línea de comandos de SQLite, no encuentro una opción, o algún mecanismo que me permita hacer algo parecido desde SQLObject. El problema es que son casi 200 mil registros y cargarlos línea a línea, o empleando la librería csv toma demasiado tiempo. Cada campo está separado por punto y coma. Existirá alguna forma de hacer esto con este ORM?

Gracias

--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia

_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Manuel Alejandro Cerón Estrada-2
Podría generar una base de datos vacía en SQLObject y luego abrir la
base de datos generada con SQLite y usar el comando import. Tiene que
estar seguro que la base de datos generada espere los campos en el
mismo orden en el que los tiene en el archivo CSV.

Una opción más recomendable y menos propensa a errores en mi opinión
es abrir el archivo línea por línea y crear cada registro con
SQLObject. 200K registros no es mucho, no creo que se demore mucho.
Más se demora esperando a que contesten en esta lista de correo :P

Manuel.

El día 19 de noviembre de 2009 20:38, Juan Pablo Valois Valencia
<[hidden email]> escribió:

> Saludos lista,
> Estoy trabajando en un proyecto en el cual empleo SQLObject para manipular
> una base de datos en SQLite, pero aunque el comando .import existe en la
> línea de comandos de SQLite, no encuentro una opción, o algún mecanismo que
> me permita hacer algo parecido desde SQLObject. El problema es que son casi
> 200 mil registros y cargarlos línea a línea, o empleando la librería csv
> toma demasiado tiempo. Cada campo está separado por punto y coma. Existirá
> alguna forma de hacer esto con este ORM?
> Gracias
> --
> Juan Pablo Valois valencia
> Estudiante de Ingeniería de Sistemas y Computación
> Universidad Tecnológica de Pereira
> Pereira - Risaralda - Colombia
>
> _______________________________________________
> Pythoneando...
> Pycolombia mailing list
> [hidden email]
> http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
>
>
_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Juan Pablo Valois Valencia
Gracias por tu pronta respuesta Manuel,

La pregunta sería entonces cómo podría usar el comando import desde Python con SQLObject?

Respecto a cargar cada registro línea a línea, es precisamente lo que hago, y créeme, no se si es el ORM pero con 5000 registros se tarda 12 mins (!!!).

Gracias de nuevo.

El 19 de noviembre de 2009 20:54, Manuel Alejandro Cerón Estrada <[hidden email]> escribió:
Podría generar una base de datos vacía en SQLObject y luego abrir la
base de datos generada con SQLite y usar el comando import. Tiene que
estar seguro que la base de datos generada espere los campos en el
mismo orden en el que los tiene en el archivo CSV.

Una opción más recomendable y menos propensa a errores en mi opinión
es abrir el archivo línea por línea y crear cada registro con
SQLObject. 200K registros no es mucho, no creo que se demore mucho.
Más se demora esperando a que contesten en esta lista de correo :P

Manuel.

El día 19 de noviembre de 2009 20:38, Juan Pablo Valois Valencia
<[hidden email]> escribió:
> Saludos lista,
> Estoy trabajando en un proyecto en el cual empleo SQLObject para manipular
> una base de datos en SQLite, pero aunque el comando .import existe en la
> línea de comandos de SQLite, no encuentro una opción, o algún mecanismo que
> me permita hacer algo parecido desde SQLObject. El problema es que son casi
> 200 mil registros y cargarlos línea a línea, o empleando la librería csv
> toma demasiado tiempo. Cada campo está separado por punto y coma. Existirá
> alguna forma de hacer esto con este ORM?
> Gracias
> --
> Juan Pablo Valois valencia
> Estudiante de Ingeniería de Sistemas y Computación
> Universidad Tecnológica de Pereira
> Pereira - Risaralda - Colombia
>
> _______________________________________________
> Pythoneando...
> Pycolombia mailing list
> [hidden email]
> http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
>
>
_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia



--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia

_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Juan Pablo Valois Valencia
In reply to this post by Juan Pablo Valois Valencia
En SQLObject existe un módulo llamado util con algunas librerías interesantes como csvexport y csvimport. Alquien las ha usado alguna vez? la documentación no está muy completa que digamos...

Gracias.

El 19 de noviembre de 2009 20:38, Juan Pablo Valois Valencia <[hidden email]> escribió:
Saludos lista,

Estoy trabajando en un proyecto en el cual empleo SQLObject para manipular una base de datos en SQLite, pero aunque el comando .import existe en la línea de comandos de SQLite, no encuentro una opción, o algún mecanismo que me permita hacer algo parecido desde SQLObject. El problema es que son casi 200 mil registros y cargarlos línea a línea, o empleando la librería csv toma demasiado tiempo. Cada campo está separado por punto y coma. Existirá alguna forma de hacer esto con este ORM?

Gracias

--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia



--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia

_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Manuel Alejandro Cerón Estrada-2
Hola

El día 19 de noviembre de 2009 22:38, Juan Pablo Valois Valencia
<[hidden email]> escribió:
> En SQLObject existe un módulo llamado util con algunas librerías
> interesantes como csvexport y csvimport. Alquien las ha usado alguna vez? la
> documentación no está muy completa que digamos...

Se podría intentar usar ese módulo. Pero es necesario modificar el
archivo CSV primero para agregar la cabecera. Igual no creo que ese
método se mucho más rápido que leer el archivo línea por línea y
agregar los elementos.

> La pregunta sería entonces cómo podría usar el comando import desde Python
> con SQLObject?

El api de sqlite en python no tiene la opción de importar. Podría
intentar usar el programa sqlite3 con el módulo subprocess. Pero de
todos modos yo tampoco creo que esto sea super rápido.

> Respecto a cargar cada registro línea a línea, es precisamente lo que hago,
> y créeme, no se si es el ORM pero con 5000 registros se tarda 12 mins (!!!).
> Gracias de nuevo.

¿Por qué es importante que sea rápido? ¿Acaso hay que hacer esto
muchas veces? Yo pensaría que la importación sólo se hace una vez.
_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Juan Pablo Valois Valencia
No comprendo bien lo de la línea de cabecera. Debe tener alguna sintaxis especial?

Lo que sucede con las rutinas nativas de sqlite como el import, es que requieren estar en la variables de entorno de Windows y eso implicaría trabajo adicional para el usuario. Y finalmente el gran problema es que el archivo sí requiere cargarse en repetidas ocasiones en la base de datos.

Te agradezco la ayuda, alguna recomendación?

El 19 de noviembre de 2009 23:07, Manuel Alejandro Cerón Estrada <[hidden email]> escribió:
Hola

El día 19 de noviembre de 2009 22:38, Juan Pablo Valois Valencia
<[hidden email]> escribió:
> En SQLObject existe un módulo llamado util con algunas librerías
> interesantes como csvexport y csvimport. Alquien las ha usado alguna vez? la
> documentación no está muy completa que digamos...

Se podría intentar usar ese módulo. Pero es necesario modificar el
archivo CSV primero para agregar la cabecera. Igual no creo que ese
método se mucho más rápido que leer el archivo línea por línea y
agregar los elementos.

> La pregunta sería entonces cómo podría usar el comando import desde Python
> con SQLObject?

El api de sqlite en python no tiene la opción de importar. Podría
intentar usar el programa sqlite3 con el módulo subprocess. Pero de
todos modos yo tampoco creo que esto sea super rápido.

> Respecto a cargar cada registro línea a línea, es precisamente lo que hago,
> y créeme, no se si es el ORM pero con 5000 registros se tarda 12 mins (!!!).
> Gracias de nuevo.

¿Por qué es importante que sea rápido? ¿Acaso hay que hacer esto
muchas veces? Yo pensaría que la importación sólo se hace una vez.
_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia



--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia

_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia
Reply | Threaded
Open this post in threaded view
|

Re: Importar .csv en una tabla SQLObject

Juan Pablo Valois Valencia
Saludos,

Les comento que tuve que crear una conexión simultánea con la librería sqlite3 a la misma base de datos (el mismo archivo), pensé que por las propiedades de archivos en Windows esto no sería posible, porque debo escribirlo también al mismo tiempo que el ORM lo está leyendo y escribiendo. Es notable la diferencia en tiempo, de 26 mins a menos de 10 segundos, luego lo único que hago es cerrar la conexión y listo, ya el ORM tiene el control de nuevo.

Quizás no es el mejor método pero me ayudó bastante. Creo que SQLObject debería enfocarse también en la eficiencia de la transaccionalidad, así como Active Record del framework Ruby on Rails.

Agradezco su ayuda y sus buenos deseos.

El 19 de noviembre de 2009 23:26, Juan Pablo Valois Valencia <[hidden email]> escribió:
No comprendo bien lo de la línea de cabecera. Debe tener alguna sintaxis especial?

Lo que sucede con las rutinas nativas de sqlite como el import, es que requieren estar en la variables de entorno de Windows y eso implicaría trabajo adicional para el usuario. Y finalmente el gran problema es que el archivo sí requiere cargarse en repetidas ocasiones en la base de datos.

Te agradezco la ayuda, alguna recomendación?

El 19 de noviembre de 2009 23:07, Manuel Alejandro Cerón Estrada <[hidden email]> escribió:

Hola

El día 19 de noviembre de 2009 22:38, Juan Pablo Valois Valencia
<[hidden email]> escribió:
> En SQLObject existe un módulo llamado util con algunas librerías
> interesantes como csvexport y csvimport. Alquien las ha usado alguna vez? la
> documentación no está muy completa que digamos...

Se podría intentar usar ese módulo. Pero es necesario modificar el
archivo CSV primero para agregar la cabecera. Igual no creo que ese
método se mucho más rápido que leer el archivo línea por línea y
agregar los elementos.

> La pregunta sería entonces cómo podría usar el comando import desde Python
> con SQLObject?

El api de sqlite en python no tiene la opción de importar. Podría
intentar usar el programa sqlite3 con el módulo subprocess. Pero de
todos modos yo tampoco creo que esto sea super rápido.

> Respecto a cargar cada registro línea a línea, es precisamente lo que hago,
> y créeme, no se si es el ORM pero con 5000 registros se tarda 12 mins (!!!).
> Gracias de nuevo.

¿Por qué es importante que sea rápido? ¿Acaso hay que hacer esto
muchas veces? Yo pensaría que la importación sólo se hace una vez.
_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia



--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia



--
Juan Pablo Valois valencia
Estudiante de Ingeniería de Sistemas y Computación
Universidad Tecnológica de Pereira
Pereira - Risaralda - Colombia

_______________________________________________
Pythoneando...
Pycolombia mailing list
[hidden email]
http://listas.el-directorio.org/cgi-bin/mailman/listinfo/pycolombia