在Mac上将MDB文件导入python

时间:2019-04-22 17:14:16

标签: python pandas ms-access mdbtools

我正在Mac上运行python 3.6。我已经下载了一个mdb文件,但是没有Microsoft访问权限,我想将每个表导入python并在其中使用它。

我已经安装了mdbtools并从Spyder运行以下命令:

this.form = fb.group({
  name: [],
  age: [],
  address: [],
});

Object.keys(this.form.controls).forEach(key  => {
  this.form.get(key).valueChanges.subscribe(value =>{
    console.log(`control ${key} has change =>` ,value)
  })
});

我收到此错误:import pandas as pd import subprocess import os os.chdir('<directory where mdb file is>') def show_tables(path='avroll_19.mdb'): tables = subprocess.check_output(["mdb-tables", path]) return tables.decode().split() show_tables() '

我也尝试过此方法,但会收到相同的错误:

FileNotFoundError: [Errno 2] No such file or directory: 'mdb-tables': 'mdb-tables

我在Anaconda中使用Sypder,我不确定这是否是一个问题。

mdb文件位于此处:https://www1.nyc.gov/assets/finance/downloads/tar/avroll_20.zip

我也尝试使用pyodbc进行此操作,但是,似乎所需的驱动程序不适用于Mac。

谢谢您的帮助。

4 个答案:

答案 0 :(得分:0)

我有一个使用R而不是Python的解决方法。我从中引用了材料  帖子:https://medium.com/@wenyu.z/reading-ms-access-mdb-files-on-mac-969a176baa7a

首先,在终端运行中:brew install mdbtools。请注意,这要求已经安装了自制软件。

第二,在R中运行此命令:

library(Hmisc)
data <- mdb.get('avroll_19.mdb')

当然,用您的数据库文件名替换avroll_19.mdb。

答案 1 :(得分:0)

我也收到未找到相同文件的错误。 这是因为我的访问数据源是较旧的32bit .mdb,而我的python是64位。

它在32位计算机上工作

答案 2 :(得分:0)

我刚刚确认,以下方法适用于pandasJayDeBeApiUCanAccess JDBC驱动程序的当前版本。有关如何设置Java / UCanAccess环境的更多详细信息,请参见this answer

import jaydebeapi
import pandas as pd

db_path = "/home/gord/UCanAccessTest.accdb"

ucanaccess_jars = [
    "/home/gord/Downloads/JDBC/UCanAccess/ucanaccess-5.0.0.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/commons-lang3-3.8.1.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/commons-logging-1.2.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/hsqldb-2.5.0.jar",
    "/home/gord/Downloads/JDBC/UCanAccess/lib/jackcess-3.0.1.jar",
]
classpath = ":".join(ucanaccess_jars)
cnxn = jaydebeapi.connect(
    "net.ucanaccess.jdbc.UcanaccessDriver",
    f"jdbc:ucanaccess://{db_path}",
    ["", ""],
    classpath,
)

df = pd.read_sql_query("SELECT * FROM Clients", cnxn)
print(df)
"""console output:
   ID      LastName FirstName                  DOB
0   1      Thompson      Gord  2017-04-01 07:06:27
1   2        Loblaw       Bob  1996-09-12 16:03:00
"""

请注意,这适用于从Access向熊猫进行读取,但不适用于使用to_sql写回Access的工作。

答案 3 :(得分:0)

我让 pandas_access 在 this 线程之后工作。问题是 Python 需要 Windows 运行 mdb-tables.exe,但它没有找到。修复方法很简单:

  • 下载存储在 this github 上的 mdbtools-win 可执行文件
  • 将包含可执行文件的文件夹添加到 Windows PATH

然后神奇地 pandas_access.read_table 开始在 Python 中工作了:

之前:

IPdb [13]: pandas_access.read_table('Database.accdb', "Table"])
*** FileNotFoundError: [WinError 2] The system cannot find the file specified

之后:

IPdb [14]: pandas_access.read_table('Database.accdb', "Table"])
      ID      Table
0      1         A
1      2         B
2      3         S
3      4         X
4      5         Z
...