我正在尝试通过Python和subprocess将磁盘上的.sql转储文件导入到MySQL中。即相当于:
应用程序成功结束,但没有将任何行导入到MySQL中。我也尝试通过管道方式像这样传输
mysql -u user -ppassword db < dump.sql
我的Python代码看起来像这样(但我尝试了许多其他方法 :)):
proc = subprocess.Popen(
("mysql -u %s -p%s database" % (MYSQL_USER, MYSQL_PASSWORD)).split(),
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
shell=False)
out, err = proc.communicate('source /tmp/dump.sql')
应用程序成功结束,但没有将任何行导入到MySQL中。我也尝试通过管道方式像这样传输
dump.sql
:proc = subprocess.Popen(
("mysql -u %s -p%s database < /tmp/dump.sql" % (MYSQL_USER, MYSQL_PASSWORD)).split(),
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
shell=False)
out, err = proc.communicate()
如果我设置shell=True
,当出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
时,这是一个重要的提示。
请问有人能指导我正确的方向吗?
-ppassword
,而-p password
会指示名为password
的数据库,对吧? - Sebastian Dahlgren.split()
时。如果我不这样做,那么我会得到mysql
帮助文本(例如mysql --help
)。 - Sebastian Dahlgren-p"{}"
(即您用于os.system
的内容),而不是-p{}
(这是您应该用于subprocess.Popen
的内容!!)。 - c z