1

我试图用 PyAthenaJDBC 连接到 athena 数据库。我正在寻找有关如何执行此操作的一些信息,并尝试了以下代码:

import contextlib
from urllib.parse import quote_plus  # PY2: from urllib import quote_plus
from sqlalchemy.engine import create_engine
from sqlalchemy.sql.expression import select
from sqlalchemy.sql.functions import func
from sqlalchemy.sql.schema import Table, MetaData

conn_str = 'awsathena+jdbc://{access_key}:{secret_key}@athena.{region_name}.amazonaws.com:443/'\
           '{schema_name}?s3_staging_dir={s3_staging_dir}'
engine = create_engine(conn_str.format(
    access_key=quote_plus('YOUR_ACCESS_KEY'),
    secret_key=quote_plus('YOUR_SECRET_ACCESS_KEY'),
    region_name='us-west-2',
    schema_name='default',
    s3_staging_dir=quote_plus('s3://YOUR_S3_BUCKET/path/to/')))
try:
    with contextlib.closing(engine.connect()) as conn:
        many_rows = Table('many_rows', MetaData(bind=engine), autoload=True)
        print(select([func.count('*')], from_obj=many_rows).scalar())
finally:
    engine.dispose()

但是当我运行此代码时,出现以下错误:

TypeError: No matching overloads found for java.util.Properties.setProperty(str,str), options are:
    public synchronized java.lang.Object java.util.Properties.setProperty(java.lang.String,java.lang.String)

    at JPMethod::findOverload(native\common\jp_method.cpp:242)
    at JPMethod::findOverload(native\common\jp_method.cpp:245)
    at JPMethod::invoke(native\common\jp_method.cpp:253)
    at PyJPMethod::__call__(native\python\pyjp_method.cpp:167)

有人可以告诉我如何解决这个问题吗?

4

1 回答 1

0

当我使用整数值连接各种连接属性时,我遇到了类似的问题。一旦我将所有连接值转换为字符串,驱动程序就可以正常连接。

对于您的配置 - 它可能是autoload=True参数,您可以尝试将其替换为autoload="True"

换句话说,setProperty 只需要一对字符串参数,并且当您传入非字符串值的内容时会感到困惑。

于 2022-01-17T17:10:13.420 回答