使用 Python Great Expectations 和 python-oracledb

问题描述 投票:0回答:1

我想设置一个 oracledb 作为数据源,但无法获取语法。这可能吗?

import oracledb
from sqlalchemy import create_engine
import getpass

username = getpass.getuser()
userpwd = getpass.getpass()
dsn="my_server"
# connect to oracle database
connection=oracledb.connect(
     user=username,
     password=userpwd,
     dsn=dsn
)
# create engine
engine = create_engine('oracle+oracledb://', creator=lambda: connection)

连接并传递到例如 pandas.read_sql 是成功的。

但是我想用gx:

import great_expectations as gx
context = gx.get_context()
context.sources.add...?

我尝试获取连接字符串

cp = oracledb.ConnectParams(user=username, password=userpwd,host=dsn)
conn_string = cp.get_connect_string()
datasource = context.sources.add_sql(
    name="my_datasource", connection_string=conn_string
)

但这行不通

TestConnectionError:尝试连接到数据源失败, 以下错误消息:由于以下原因无法创建 SQLAlchemy 引擎 出现以下异常:无法从字符串中解析 SQLAlchemy URL '(描述=(地址=(协议= tcp)(主机= myserver)(端口= 1521)))'

有什么想法吗?

python oracle great-expectations python-oracledb
1个回答
0
投票

这为我创建了一个数据源:

import getpass
import os
import oracledb
import great_expectations as gx

un = os.environ.get('PYTHON_USERNAME')
cs = os.environ.get('PYTHON_CONNECTSTRING')
pw = getpass.getpass(f'Enter password for {un}@{cs}: ')

# I use Easy Connect strings like "localhost/orclpdb1".  These two lines
# let me access the components individually
cp = oracledb.ConnectParams()
cp.parse_connect_string(cs)

connection_string = f'oracle+oracledb://{un}:{pw}@{cp.host}:{cp.port}/?service_name={cp.service_name}'

context = gx.get_context()

datasource = context.sources.add_sql(
    name="my_datasource", connection_string=connection_string
)

asset_name = "my_query_asset"
query = "select * from employees"

query_asset = datasource.add_query_asset(name=asset_name, query=query)

for i in query_asset:
    print(i)

运行它会给出:

('name', 'my_query_asset')
('type', 'query')
('id', None)
('order_by', [])
('batch_metadata', {})
('splitter', None)
('query', 'select * from employees')

有关将 oracledb 与 SQLAlchemy 连接的信息,请参阅将 SQLAlchemy 2.0 与 python-oracledb 用于 Oracle 数据库

© www.soinside.com 2019 - 2024. All rights reserved.