python 苹果 windows_在非Windows平台(Linux或Mac)上使用Python中的Ac...

“根据我的研究,pyodbc只能在Windows平台上使用”

Precompiled binary wheels are provided for most Python versions on Windows and macOS. On other operating systems [pip install pyodbc] will build from source.

但是,使用ODBC来操作Access数据库肯定是在Windows上完成的. “MDB工具”和“unixODBC”经常被提及作为在非Windows平台上使用Access数据库的一种方式,但在我有限的经验中,我发现它确实不能很好地工作(当它工作时)在所有).

当然,您始终可以为非Windows平台购买第三方MS Access ODBC驱动程序,但如果您需要免费的开源解决方案,则可以使用UCanAccess JDBC驱动程序.有两种方法可以实现:JayDeBeApi和Jython.

在这两种情况下,您都需要下载最新版本的UCanAccess(可供下载here)并将“bin.zip”文件解压缩到一个方便的位置,确保保留文件夹结构:

O96Bs.png

(在以下示例中,我将其解压缩到?/ Downloads / JDBC / UCanAccess.)

选项1:JayDeBeApi

这是首选选项,因为它应该与您现有的Python设置一起使用.你可以用pip安装JayDeBeApi.目前(2019年7月),JPype1的更高版本存在问题,因此您应该安装特定版本

pip install JPype1==0.6.3 JayDeBeApi==1.1.1

如果您还没有安装JRE(Java运行时环境),那么您也需要它. (我在Ubuntu上使用了sudo apt install default-jre.)

一旦所需的组件到位,您应该能够使用如下代码:

import jaydebeapi

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

ucanaccess_jars = [

"/home/gord/Downloads/JDBC/UCanAccess/ucanaccess-4.0.4.jar",

"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-lang-2.6.jar",

"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-logging-1.1.3.jar",

"/home/gord/Downloads/JDBC/UCanAccess/lib/hsqldb.jar",

"/home/gord/Downloads/JDBC/UCanAccess/lib/jackcess-2.1.11.jar",

]

classpath = ":".join(ucanaccess_jars)

cnxn = jaydebeapi.connect(

"net.ucanaccess.jdbc.UcanaccessDriver",

f"jdbc:ucanaccess://{db_path};newDatabaseVersion=V2010",

["", ""],

classpath

)

crsr = cnxn.cursor()

try:

crsr.execute("DROP TABLE table1")

cnxn.commit()

except jaydebeapi.DatabaseError as de:

if "user lacks privilege or object not found: TABLE1" in str(de):

pass

else:

raise

crsr.execute("CREATE TABLE table1 (id COUNTER PRIMARY KEY, fname TEXT(50))")

cnxn.commit()

crsr.execute("INSERT INTO table1 (fname) VALUES ('Gord')")

cnxn.commit()

crsr.execute("SELECT * FROM table1")

for row in crsr.fetchall():

print(row)

crsr.close()

cnxn.close()

选项2:Jython

(注意,Jython是Python的单独实现,它只支持Python 2.7,显然不再处于活动开发阶段.)

重要说明:以下说明适用于UCanAccess 3.0.5或更高版本.

之后……

>安装Jython(通过Ubuntu上的sudo apt-get install jython)和

>下载UCanAccess并按上述方法解压缩

我创建了以下名为“dbTest.py”的Jython脚本

from com.ziclix.python.sql import zxJDBC

jdbc_url = "jdbc:ucanaccess:///home/gord/Documents/test.accdb"

username = ""

password = ""

driver_class = "net.ucanaccess.jdbc.UcanloadDriver"

cnxn = zxJDBC.connect(jdbc_url, username, password, driver_class)

crsr = cnxn.cursor()

crsr.execute("SELECT AgentName FROM Agents")

for row in crsr.fetchall():

print row[0]

crsr.close()

cnxn.close()

并使用以下shell脚本运行它

#!/bin/bash

export CLASSPATH=.:/home/gord/Downloads/JDBC/UCanAccess/loader/ucanload.jar

jython dbTest.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值