在python中使用dsbulkload

在python中使用dsbulkload,python,cassandra,dsbulk,datastax-astra,Python,Cassandra,Dsbulk,Datastax Astra,我在DataStax Astra中创建了一个Cassandra数据库。我能够用Python连接到它(使用cassandra驱动程序模块和secure\u connect\u bundle)。我在Python应用程序中编写了一些api来查询数据库 我读到我可以使用dsbulk将csv上传到它。我能够在终端中运行以下命令,并且可以正常工作 dsbulk load -url data.csv -k foo_keyspace -t foo_table \ -b "secure-connect-

我在DataStax Astra中创建了一个Cassandra数据库。我能够用Python连接到它(使用
cassandra驱动程序
模块和
secure\u connect\u bundle
)。我在Python应用程序中编写了一些api来查询数据库

我读到我可以使用
dsbulk
将csv上传到它。我能够在终端中运行以下命令,并且可以正常工作

dsbulk load -url data.csv -k foo_keyspace -t foo_table \
-b "secure-connect-afterpay.zip" -u username -p password -header true
然后,我尝试在Python中使用
子流程运行这一行:

ret = subprocess.run(
    ['dsbulk', 'load', '-url', 'data.csv', '-k', 'foo_keyspace', '-t', 'foo_table', 
     '-b', 'secure-connect-afterpay.zip', '-u', 'username', '-p', 'password', 
     '-header', 'true'],
    capture_output=True
)
但是我得到了
FileNotFoundError:[Errno 2]没有这样的文件或目录:“dsbulk”:“dsbulk”
。如果从Python运行
dsbulk
,为什么无法识别它



一个相关的问题是,依赖
子流程
可能不是最佳实践。是否有更好的方法将批处理数据上传到Cassandra?

我认为这与子流程处理路径的方式有关。尝试将命令指定为绝对路径或相对路径,如“/dsbulk”或“bin/dsbulk”


或者,如果您将DS Bulk包中的bin目录添加到PATH环境变量中,它将按照您的方式工作。

我已经将其添加到PATH中。我在.zshrc
export PATH=~/dsbulk-1.6.0/bin:$PATH中添加了这一行:没关系!我在Jupyter笔记本上运行命令。不知怎的,它不起作用了。当我将
子流程作为实际的python脚本运行时,它就会工作。我感谢你的帮助!