2010-09-01 4 views
33

Может ли кто-нибудь указать мне в правильном направлении, как открыть файл .mdb в python? Обычно мне нравится включать некоторый код, чтобы начать обсуждение, но я не знаю, с чего начать. Я работаю с mysql с честным битом с python. Мне было интересно, есть ли способ работать с .mdb-файлами аналогичным образом?Как обращаться с файлами доступа .mdb с python

ответ

41

Ниже приведен код, написанный мной для another SO question.
Требуется сторонний участник pyodbc module.

Этот очень простой пример подключается к таблице и экспортирует результаты в файл.
Не стесняйтесь расширять свой вопрос с помощью каких-либо конкретных потребностей, которые могут возникнуть у вас.

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) 
+1

Это, похоже, не работает из Linux, поскольку по умолчанию для драйвера Access отсутствует драйвер, в котором используется pyodbc. «Имя источника данных не найдено, и указанный драйвер по умолчанию не указан (0) (SQLDriverConnect)» – Cerin

+0

@Cerin: спасибо за обновление. Поскольку вопрос не указывал «из Linux», я не рассматривал эту проблему. С наилучшими пожеланиями. – bernie

+1

@bernie есть способ сделать это в linux? – NumenorForLife

3

Это выглядит похоже на предыдущий вопрос:

Ответ должен быть полезным.

+1

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/18943453) –

1

В дополнение к ответу Bernie, я хотел бы добавить, что можно восстановить схему базы данных. В приведенном ниже коде перечислены таблицы (b [2] содержит имя таблицы).

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 

Код ниже перечислены все столбцы из всех таблиц:

colDesc = list(cur.columns()) 
1

Для решения, которое работает на любой платформе, которая может работать Java, рассмотреть возможность использования Jython или JayDeBeApi вместе с водителем UCanAccess JDBC , Для получения дополнительной информации см смежный вопрос

Read an Access database in Python on non-Windows platform (Linux or Mac)

3

Там в meza library by Reuben Cummings, который может читать базы данных Microsoft Access через mdbtools.

Установка

# 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 

Использование

>>> from meza import io 

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

Table1 
Table2 
… 
+0

отлично работает с Linux (тестируется в CenOs 7 и Ubuntu с python 2.7), очень простой способ читать данные из файлов .mdb. Благодаря ;-) – serfer2

Смежные вопросы