我使用jaydebeapi连接到一个数据库,并使用以下代码段连接到jdbc驱动程序,当正确指定所有参数时,它可以正常工作。
我将凭据存储在环境变量中,例如。
os.environ.get('credentials')
import jaydebeapi as dbdriver
import os
cnxn = None
server_name=''
server_jdbc_port=
server_database=''
name_env_credentials=''
name_env_pwd=''
try:
driver_path = "XXXXXXX"
conn_uri = "jdbc:://%s:%s/%s?" % (server_name,server_jdbc_port, server_database)
cnxn = dbdriver.connect( "XXXXXXX",
conn_uri,
driver_args = {"user": os.environ.get(name_env_credentials),
"password": os.environ.get(name_env_pwd)},
jars = driver_path)
print('Connection open')
except (Exception) as error:
raise error
finally: # in any case close connection and free resources
if cnxn is not None:
cnxn.close()
print('Database connection closed.')
如果我获得的凭据/访问权限有一些错误,那没关系。
java.sql.SQLExceptionPyRaisable: java.sql.SQLException: authentication error:
Insufficient privileges to connect to the database 'XXXXX'
但是当我把上面的内容包装成一个函数时,
pytest
-在server_name、server_jdbc_port、server_database、name_env_credentials和name_env_pwd上进行参数化。
######test_issue.py
@pytest.mark.parametrize("server_name,server_jdbc_port,server_database,name_env_credentials,name_env_pwd", testdata)
def test_connectivity():
# above code
当我跑步时
pytest test_issue.py
和中的一个错误,我在日志中以纯文本形式找到我的凭据,这是一个问题。
确切地说,我没有看到内容
name_env_credentials
(可以接受)但实际上的内容
os.environ.get(name_env_credentials)
(例如下面的MYPLAINTEXTUSERNAME)
test_issue.py:56: in test_connectivity
cnxn = dbdriver.connect( "--------",
/opt/conda/lib/python3.8/site-packages/jaydebeapi/__init__.py:412: in connect
jconn = _jdbc_connect(jclassname, url, driver_args, jars, libs)
[........]
driver_args = {'password': MYPLAINTEXTPASSWORD, 'user': MYPLAINTEXTUSERNAME}
[........]
jaydebeapi.__version__='1.2.3'