使用sqoop从mysql数据库获取数据,无论是从shell还是从python子进程运行,结果都不一致。但是,在访问oracledb时,即使是从同一个python会话,我也不会遇到这种问题。
以下将按预期从shell运行:
export username="user1"
URI="jdbc:mysql://$host/dbname"
URI="${URI}?verifyServerCertificate=false"
URI="${URI}&useSSL=true"
URI="${URI}&requireSSL=false"
## List Tables
sqoop list-tables \
--connect ${URI} \
--username ${username} \
--password-file password.file
但是,在python子进程中不会运行完全相同的操作:
import subprocess
## List Tables
subprocess.Popen(
'sqoop list-tables --connect jdbc:mysql://$host/dbname?verifyServerCertificate=false&useSSL=true&requireSSL=false --username user1 --password-file password.file',
shell=True)
出现以下错误:
ERROR [main] manager.CatalogQueryManager (LoggingUtils.java:logAll(43)) - Failed to list tables
java.sql.SQLException: Access denied for user ''@'100.100.100.100' (using password: NO)
要通过python子进程使用sqoop连接到mysql数据库,我还需要做些什么吗?
1条答案
按热度按时间jaql4c8m1#
发帖后马上就发现了。也许它能帮助别人。
我需要把连接字符串包起来
""
.下面是一个更整洁的python表示。