我有一个python脚本,它使用python模块子进程在mysql数据库上执行操作。我是docker的新手,并尝试使用docker运行此代码。 我创建了一个docker compose文件来运行我的python脚本的容器和我的mysql db的容器。 mysql-connector模块中的MySQLConnection对象工作正常,但我想使用子进程模块对mysql容器执行mysql操作。我该怎么做呢?
这有效:
db = MySQLConnection(host="mysql-container", user="root", password="secret")
cursor = db.cursor()
cursor.execute("SHOW SCHEMAS")
data = cursor.fetchone()
这给出错误:“[Errno 2]没有这样的文件或目录:'mysql':'mysql'”。
p = subprocess.Popen(["mysql", "-h", "mysql-container", "-P", "3306", "-u", "root", "-psecret"],
stdout=subprocess.PIPE, stdin=subprocess.PIPE)
p.communicate("source sql_file.sql")
答案 0 :(得分:0)
首先,事实证明,主机缺少mysql客户端。
然而,通常不必要的容器端口暴露不是一个好习惯。相反,我会考虑在容器中运行命令,如:
docker exec -t container_name bash -c "echo mysql_command | mysql [params]"