ti-enxame.com

como lidar com arquivos de acesso .mdb com python

Alguém pode me apontar na direção certa sobre como abrir um arquivo .mdb em python? Normalmente, gosto de incluir algum código para iniciar uma discussão, mas não sei por onde começar. Eu trabalho com o mysql um pouco com python. Eu queria saber se existe uma maneira de trabalhar com arquivos .mdb de uma maneira semelhante?

39
Richard

Abaixo está um código que eu escrevi para outro SO questão .
Requer terceiros módulo pyodbc .

Este exemplo muito simples se conectará a uma tabela e exportará os resultados para um arquivo.
Sinta-se à vontade para expandir sua pergunta com quaisquer necessidades mais específicas que você possa ter.

import csv, pyodbc

# set up some constants
MDB = 'c:/path/to/my.mdb'
DRV = '{Microsoft Access Driver (*.mdb)}'
PWD = 'pw'

# connect to db
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()

# run a query and get the results 
SQL = 'SELECT * FROM mytable;' # your query goes here
rows = cur.execute(SQL).fetchall()
cur.close()
con.close()

# you could change the mode from 'w' to 'a' (append) for any subsequent queries
with open('mytable.csv', 'wb') as fou:
    csv_writer = csv.writer(fou) # default field-delimiter is ","
    csv_writer.writerows(rows)
46
bernie
4
pyfunc

Existe o biblioteca meza de Reuben Cummings que pode ler os bancos de dados do Microsoft Access através de mdbtools .

Installation

# The mdbtools package for Python deals with MongoDB, not MS Access. 
# So install the package through `apt` if you're on Debian/Ubuntu
$ Sudo apt install mdbtools
$ pip install meza

Uso

>>> from meza import io

>>> records = io.read('database.mdb') # only file path, no file objects
>>> print(next(records))

Table1
Table2
…
3
jnns

Para uma solução que funcione em qualquer plataforma que possa executar Java, considere usar Jython ou JayDeBeApi junto com o driver JDBC CanAccess . Para detalhes, consulte a pergunta relacionada

Leia um banco de dados do Access em Python na plataforma não Windows (Linux ou Mac)

1
Gord Thompson

Além da resposta de Bernie, eu acrescentaria que é possível recuperar o esquema do banco de dados. O código abaixo lista as tabelas (b [2] contém o nome da tabela).

con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()

tables = list(cur.tables())

print 'tables'
for b in tables:
    print b

O código abaixo lista todas as colunas de todas as tabelas:

colDesc = list(cur.columns())
1
mmicoski