如何在docker容器中使用python子进程执行mysql命令

时间:2018-03-20 17:44:39

标签: python mysql docker subprocess

我有一个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")

1 个答案:

答案 0 :(得分:0)

首先,事实证明,主机缺少mysql客户端。

然而,通常不必要的容器端口暴露不是一个好习惯。相反,我会考虑在容器中运行命令,如:

docker exec -t container_name bash -c "echo mysql_command | mysql [params]"