我正在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。
谢谢您的帮助。
答案 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)
我刚刚确认,以下方法适用于pandas,JayDeBeApi和UCanAccess 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,但它没有找到。修复方法很简单:
然后神奇地 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
...