繁体   English   中英

如何从 Python Azure Synapse 笔记本连接到 Oracle DB?

[英]How to connect to an Oracle DB from a Python Azure Synapse notebook?

我正在尝试从 Azure Synapse 笔记本中查询 Oracle 数据库,最好使用 Pyodbc,但 pyspark 解决方案也是可以接受的。 我相信这里的复杂性来自火花池的低可配置性——我相信代码通常是正确的。

host = 'my_endpoint.com:[port here as plain numbers, e.g. 1111]/orcl'
database = 'my_db_name'
username = 'my_username'
password = 'my_password'

conn = pyodbc.connect( 'DRIVER={ODBC Driver 17 for SQL Server};'
'SERVER=' + host + ';'
'DATABASE=' + database + ';'
'UID=' + username + ';'
'PWD=' + password + ';')

我尝试过的方法:

Pyodbc - 我可以使用可用的默认驱动程序({ODBC Driver 17 for SQL Server})并且我得到登录超时。 我已经尝试了服务器的普通 URL 和 IP,并且使用了端口、无端口、逗号端口、冒号端口的所有组合,并且没有附加服务名称“orcl”。 代码示例在上面,但我认为问题出在驱动程序上。

Pyspark.read - 没有指定 JDBC 驱动程序,我收到“没有合适的驱动程序”错误。 我能够将 OJDBC.jar 添加到工作区或我的文件目录,但我无法弄清楚如何告诉 spark 应该使用它。

cx_oracle - 我的工作区不允许这样做。

如果解决方案需要设置环境变量或使用 spark-submit,请提供一个链接,说明如何在 Synapse 中最好地做到这一点。 我会对 JDBC 或 ODBC 解决方案感到满意。

通过将此处的.jar (ojdbc8-19.15.0.0.1.jar) 添加到 Synapse 工作区包,然后将 package 添加到 ZE9713AE04A02A810D6F33DD9,我能够执行以下代码包

host = 'my_host_url'
port = 1521
service_name = 'my_service_name'

jdbcUrl = f'jdbc:oracle:thin:@{host}:{port}:{service_name}'
sql = 'SELECT * FROM my_table'
user = 'my_username'
password = 'my_password'
jdbcDriver = 'oracle.jdbc.driver.OracleDriver'

jdbcDF = spark.read.format('jdbc') \
    .option('url', jdbcUrl) \
    .option('query', sql) \
    .option('user', user) \
    .option('password', password) \
    .option('driver', jdbcDriver) \
    .load()

display(jdbcDF)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM