我想将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
)

但这行不通

TestConnection错误:try 连接到收件箱失败, 以下错误消息:无法创建SQLAlchemy引擎,因为 以下异常:无法从字符串中解析SQLAlchemy URL '(描述=(地址=(PROTOPOL =tcp)(主机=myserver)(PORT=1521)'

有什么 idea 吗?

推荐答案

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

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连接的信息,请参阅Using SQLAlchemy 2.0 with python-oracledb for Oracle Database.

Python相关问答推荐

产生镜像输出的MSG算法输出

Pandas或pyspark跨越列创建

Python tkinter关闭第一个窗口,同时打开第二个窗口

在pandas DataFrame上运行apply()时如何访问DateTime索引?

如何将uint 16表示为float 16

如何在Python中增量更新DF

jit JAX函数中的迭代器

计算相同形状的两个张量的SSE损失

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

对某些列的总数进行民意调查,但不单独列出每列

Gekko:Spring-Mass系统的参数识别

如何找到满足各组口罩条件的第一行?

pandas滚动和窗口中有效观察的最大数量

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

如何从pandas的rame类继承并使用filepath实例化

在vscode上使用Python虚拟环境时((env))

joblib:无法从父目录的另一个子文件夹加载转储模型

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

从列表中获取n个元素,其中list [i][0]== value''