2011-05-05 31 views
7

Un objetivo principal de un proyecto que planeo hacer una oferta es crear una base de datos de Microsoft Access usando python. El backend DB principal será postgres, pero el plan es exportar una imagen de Access.Creando una base de datos MS Access usando python

Esta será una aplicación web que le dejará sin intervención del usuario y pasar por una caja de negro y de los resultados como una db acceso. La aplicación web se construirá en un servidor Linux.

tengo unas pocas preguntas relacionadas:

  • ¿Existe una biblioteca fiable o módulo que se puede utilizar?
  • ¿Cuál es su experiencia con Access y python?
  • ¿Alguna sugerencia, trucos o debe evitar que necesito saber?

Gracias :)

+0

Si se instala Access, puede automatizarlo desde Python usando las extensiones de Python para Windows: http://sourceforge.net/projects/pywin32/ – HansUp

+0

@HansUp - No, no se instalará ya que la aplicación web irá en un servidor Linux – dassouki

+0

Duplicado de http://stackoverflow.com/questions/256459/populate-a-ms-access-database-in-linux – abbot

Respuesta

4

¿Podría usar una base de datos sqlite en su lugar?

edición:

si tiene que estar en Linux y que tiene que ser a MS Access, entonces estoy bastante seguro de this is your only choice, pero cuesta $ 1,550.

Vas a tener que desembolsar el dinero o convencer al cliente para que cambie uno de los otros dos parámetros. Personalmente, presionaría para cambiar el archivo de la base de datos a sqlite.

Por supuesto, siempre puedes codificar tu propio controlador de base de datos, pero probablemente valga la pena gastar los $ 1,550. mdbtools ha estado trabajando en esto durante años y el proyecto ha sido prácticamente abandonado.

lo encontraron, un poco

Ok, así que simplemente no podía dejar pasar esto y encontraron que hay una biblioteca de Java llamada Jackcess que escribir en los archivos de MS Access MDB en cualquier plataforma que pueda ejecutar el jvm. De acuerdo, es Java y no Python, pero tal vez podrías aprender lo suficiente de Java para lanzar una aplicación y ejecutarla desde Python. O simplemente cambia toda la aplicación a Java, lo que sea.

+0

Estrictamente, el resultado de la aplicación ** debe ** ser un archivo MS Access MDB. – dassouki

+0

Pensé que dirías eso. – James

+0

Gracias por la sugerencia. No he tocado Java en 8 años, pero estoy seguro de que puedo elegir lo suficiente para poder ejecutarlo como una API que puedo de python – dassouki

0

Yo sugeriría moving los datos en una base de datos Microsoft SQL, linking or importing los datos de acceso.

+0

El requisito principal del proyecto es generar un db de msaccess. El servidor que tienen para alojar es linux – dassouki

+0

Y el servidor puede ser cualquier cosa que desee, la salida debe almacenarse en un MDB de acceso – dassouki

2

Las diversas respuestas a la pregunta duplicada sugieren que su "objetivo principal" de crear una base de datos MS Access en un servidor Linux no es posible.

Por supuesto, un objetivo así no vale la pena en absoluto. Si nos dice lo que se espera de los usuarios/consumidores de Access db con, tal vez podamos ayudarlo. Posibilidades: (1) crear un script y un (conjunto de) archivo (s) que el usuario descarga y ejecuta para crear un Access DB (2) si es solo para el examen/manipulación casual del usuario, un archivo de Excel puede hacerlo.

+0

Estrictamente, el resultado de la aplicación ** debe ** ser un archivo MS Access MDB. – dassouki

+0

El objetivo parece ser alcanzable mediante el uso de Jython/Jackcess, Python y un convertidor java/Jackcess, o un puerto a python de Jackcess. Sin duda será un dolor sin embargo. O pague 1500 y use unixODBC (probablemente sea más económico que el desarrollo interno con Jackcess) – extraneon

0

¿Podría crear un archivo autoextraíble para enviar al usuario de Windows que tiene instalado Microsoft Access?

  1. Incluya un archivo .mdb en blanco.
  2. construir dinámicamente documentos XML con tablas, esquemas y datos
  3. Incluir un archivo ejecutable de importación que se llevará a todos los documentos XML e importar en archivo .mdb de Access.

Es un paso adicional para el usuario, pero puede confiar en sus controladores, software y escritorio existentes.

+0

Ojalá, como dije antes, la salida debe ser una aplicación mdb. – dassouki

2

Si usted sabe que esto lo suficientemente bien:

módulos de bases de datos
  • Python, es, y la configuración de ODBC

entonces usted debe saber cómo hacer esto:

  • abrir una base de datos , lea algunos datos, insértelo en una base de datos diferente

Si es así, entonces está muy cerca de la solución que necesita. El truco es que puede abrir un archivo MDB como fuente de datos ODBC. Ahora: No estoy seguro de si se puede "crear tablas" con ODBC en un archivo MDB, así que me propongo esta receta:

  1. Crear un archivo MDB con el nombre de "TARGET.MDB" - con lo necesario tablas, formularios, informes, etc. (Ponga algunos datos ficticios y pruebe que es lo que el cliente querría).
  2. Configure un origen de datos ODBC en el archivo "TARGET.MDB". Prueba para asegurarte de que puedas leer/escribir.
  3. Elimina todos los datos ficticios, pero deja la tabla defs intacta. Cambie el nombre del archivo "TEMPLATE.MDB".
  4. Cuando necesite generar un nuevo archivo MDB: con Python copie TEMPLATE.MDB en TARGET.MDB.
  5. Abra la fuente de datos para escribir en TARGET.MDB. Crear/copiar registros requeridos.
  6. Cierre la fuente de datos, cambie el nombre de TARGET.MDB a TODAYS_REPORT.MDB ... o lo que tenga sentido para esta exportación de datos en particular.

¿Eso funcionaría para usted?

Es casi seguro que sea más fácil hacer eso en Windows ya que el soporte para ODBC estará más ampliamente disponible. Sin embargo, creo que en principio podría hacer esto en Linux, siempre que encuentre los componentes ODBC correctos para acceder a MDB a través de ODBC.

+0

¿Quién le está dando el par de requisitos mutuamente contradictorios de que la salida debe ser un MDB Jet/ACE y la creación debe ocurrir en una caja Linux? Eso es simplemente locura. –

+0

@ David-W-Fenton: son clientes para usted :) – extraneon

+0

Despido a clientes que no me dejan hacer el trabajo que me están pagando. –

1

Puede exportar a XML utilizando el espacio de nombres de OfficeData de MS. El acceso no debería tener ningún problema para consumir eso. Puede proporcionar un esquema xsd por separado o codificar tipos y relaciones directamente en el árbol de documentos. He aquí un ejemplo sencillo:

<?xml version="1.0" encoding="UTF-8"?> 
<dataroot xmlns="urn:schemas-microsoft-com:officedata"> 

<Table1><Foo>0.00</Foo><Bar>2011-05-11T00:00:00.000</Bar></Table1> 
<Table1><Foo>3.00</Foo><Bar>2011-05-07T00:00:00.000</Bar></Table1> 

<Table2><Baz>Hello</Baz><Quux>Kitty</Quux></Table2> 
</dataroot> 

googlear "urn: schemas-microsoft-com: officedata" debe subir algunos golpes útiles.

0

Bueno, me parece que necesita una copia del servidor vmware en la ventana de ejecución de linux, un servicio web en la vm para escribir el acceso y las comunicaciones desde la caja de Linux principal. No vas a encontrar un medio para crear un acceso db en Linux. Llamarlo un requisito no lo hará técnicamente posible.

+0

Cualquier cosa es posible en Linux;) – James

0

http://adodb.sourceforge.net/ - instala en Linux, escrito en php o python, se conecta a Access y PostgreSQL.

Lo hemos usado durante años, y funciona muy bien.

+0

Entonces, si tengo una "plantilla" ms acceda a db, entonces debería funcionar perfecto, con pequeñas ediciones/cambios? – dassouki

Cuestiones relacionadas