gpt4 book ai didi

python - 使用子进程导入 SQL 转储

转载 作者:可可西里 更新时间:2023-11-01 07:45:59 25 4
gpt4 key购买 nike

我正在尝试通过 Python 和子进程将 .sql 转储从磁盘导入 MySQL。 IE。相当于

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))

谁能给我指出正确的方向?

最佳答案

如果您从 Google 访问此页面,请注意,sigi 的答案会起作用,但它会将所有转储文件加载到内存中,如果它太大而不适合,它将失败。

这是我的做法:

with open(dump_filename, 'r') as f: 
command = ['mysql', '-u%s' % db_settings['USER'], '-p%s' % db_settings['PASSWORD'], db_settings['NAME']]
proc = subprocess.Popen(command, stdin = f)
stdout, stderr = proc.communicate()

它做同样的事情,但内存消耗是最小的,因为转储直接流式传输到 mysql 的标准输入。

关于python - 使用子进程导入 SQL 转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com