【发布时间】:2013-01-30 09:13:31
【问题描述】:
我已经用 Python 编写了两个小函数来从控制台调用 mysqldump 和 mysql,所以我可以创建一个数据库备份然后恢复它:
# Makes a backup current database status
def backupDatabase():
if(os.path.exists('myDatabaseBackup.sql')):
os.remove('myDatabaseBackup.sql')
call(['mysqldump', '-u myUsername myDatabase > myDatabaseBackup.sql'])
# Restores database
def restoreDatabase():
call(['mysql', '-u myUsername myDatabase < myDatabaseBackup.sql'])
然而,他们没有工作。我读过该调用有两个值:可执行文件和参数,但看起来参数被忽略了,因为调用 backupDatabase 后的输出是:
用法:mysqldump [OPTIONS] database [tables] OR ...更多选项, se mysqldump --help
怎么了?我知道我可以使用Pipes(我目前不知道如何使用,只知道它们存在并且是替代方案),但是由于这看起来是一个非常简单的任务,我猜subprocess.call 应该足够了。那么,有没有可能用subprocess.call 解决这个问题? (如果没有,请为Pipes 或任何其他解决方案提供一些帮助。
另外,我将MySQLdb 包用于其他目的,所以如果可以使用此包以某种方式备份和恢复,那就太好了。
【问题讨论】:
-
一些猜测:1) 你必须拆分参数,否则它们最终会被引用。 “-u”、“我的用户名”、“我的数据库”。 2) 是默认不解释的 shell 语法。尝试使用 shell=True。 (并相应地拆分,因此它不会被解释为单个参数)。
标签: python mysql-python