Como lidar com arquivos de acesso .mdb com python
Pergunta
Alguém pode me apontar na direção certa sobre como abrir um arquivo .mdb no 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 o Python. Eu queria saber se existe uma maneira de trabalhar com arquivos .mdb de maneira semelhante?
Solução
Abaixo está algum código que escrevi para Outra pergunta.
Requer a terceira parte 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 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)
Outras dicas
Isso se parece com uma pergunta anterior:
- O que preciso ler bancos de dados do Microsoft Access usando o Python?
- http://code.activestate.com/recipes/528868-extraction-and-anipulation-class-for-microsoft-ac/
Resposta lá deve ser útil.
Lá está o Biblioteca Meza de Reuben Cummings que pode ler bancos de dados de acesso à Microsoft através mdbtools.
Instalação
# 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
…
Além da resposta de Bernie, 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())
Para uma solução que funcione em qualquer plataforma que possa executar Java, considere usar Jython ou Jaydebeapi juntamente com o Ucanaccess Driver JDBC. Para detalhes, consulte a pergunta relacionada
Leia um banco de dados de acesso em Python na plataforma não-Windows (Linux ou Mac)