Oracle Client是一套闭源的客户端,在哪个平台上可以使用完全由Oracle官方决定。如附录所示,Oracle Client并不直接支持ARM上的访问。
那么是不是Python等语言就无法在ARM上访问Oracle了呢?在Stackoverflow上也有人讨论了这样几个方法:
- 解析Oracle Client Interface 通讯协议,可以做但是成本高且有法律和升级失效等风险
- 使用X86作为中转,但是不纯粹且依赖链长
- 使用Python-JDBC,已经有成熟方案JayDeBeApi https://pypi.org/project/JayDeBeApi/,通过JPype启动一个JVM进行中转
此外,还有通过pyarrow.jvm加速Python访问JDBC的方法,请参考我的上一篇转发文章https://blog.csdn.net/gikod/article/details/105189589 。
在Stackoverflow上,已经有人验证过树莓派ARM访问Oracle数据库。
https://stackoverflow.com/questions/56838410/problem-classpath-for-jaydebeapi-from-raspberry
$ pip install JayDeBeApi
- 1
>>> import jaydebeapi
>>> #conn = jaydebeapi.connect("org.hsqldb.jdbcDriver",
... # "jdbc:hsqldb:mem:.",
... # ["SA", ""],
... # "/path/to/hsqldb.jar",)
>>> conn=jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
'[admin]/[root]@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=helloworld.com)(PORT=1521))(CONNECT_DATA=(SID=hello42)))',
jars='/home/pi/ojdbc6.jar')
>>> curs = conn.cursor()
>>> curs.execute('create table CUSTOMER'
... '("CUST_ID" INTEGER not null,'
... ' "NAME" VARCHAR not null,'
... ' primary key ("CUST_ID"))'
... )
>>> curs.execute("insert into CUSTOMER values (1, 'John')")
>>> curs.execute("select * from CUSTOMER")
>>> curs.fetchall()
[(1, u'John')]
>>> curs.close()
>>> conn.close()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
附录,Oracle客户端支持的平台。
Oracle Instant Client Downloads
Instant Client for Microsoft Windows
Instant Client for Microsoft Windows (x64)
Instant Client for Microsoft Windows (32-bit)
Instant Client for Microsoft Windows 64-bit Itanium
Instant Client for macOS
Instant Client for macOS (Intel x86)
Instant Client for Mac OS X (PPC)
Instant Client for Linux
Instant Client for Linux x86-64
Instant Client for Linux x86
Instant Client for Linux AMD64 (32-bit and 64-bit)
Instant Client for Linux on Power Big Endian (32-bit)
Instant Client for Linux on Power Big Endian (64-bit)
Instant Client for Linux on Power Little Endian (64-bit)
Instant Client for z/Linux (31-bit)
Instant Client for z/Linux (64-bit)
Instant Client for Linux Itanium
Instant Client for Solaris
Instant Client for Solaris Operating System (SPARC) (64-bit)
Instant Client for Solaris Operating System (SPARC) (32-bit)
Instant Client for Solaris x86-64
Instant Client for Solaris x86
Instant Client for HP
Instant Client for HP-UX PA-RISC (64-bit)
Instant Client for HP-UX PA-RISC (32-bit)
Instant Client for HP Tru64 UNIX
Instant Client for HP-UX Itanium (64-bit)
Instant Client for HP-UX Itanium (32-bit)
Instant Client for AIX
Instant Client for AIX (PPC64)
Instant Client for AIX (PPC32)