我将使用pymysql
,tempfile
和subprocess
编写一个将我的 MySQL 数据库传输到 MongoDB 的脚本,但到目前为止我还没有做好。
在以下代码中:
for table_name in table_list:
cur.execute("select * from {0};".format(table_name))
with tempfile.TemporaryFile(mode='w+') as fp:
writer = csv.writer(fp)
writer.writerow([i[0] for i in cur.description])
for record in cur.fetchall():
writer.writerow(record)
fp.seek(0)
subprocess.Popen(['mongoimport', '-d', db_mongo, '-c', table_name, '--type', 'csv', '--file', *** I don't know what should be specified here ***, '--headerline'])
我尝试迭代任何mysql数据库的表名,从表中选择所有数据,将结果写入临时文件,然后使用mongoimport
将文件中的数据倒入mongodb数据库。subprocess.Popen
但是,一,我不知道如何在函数中指出文件名。二、有没有更好的方法来做我想做的事?我认为有,但在我的脑海中想不出比这更好的一个......
供您参考,我最初使用实际(不是临时)文件名,但如果表太大,它会失败,因为它会在完成前一个表的subprocess.Popen
操作之前尝试创建另一个从另一个表派生的文件(我的意思是进入下一次迭代) ,并且它还迫使我在整个过程完成后删除文件,所以我更喜欢使用临时文件而不是实际文件,但不完全确定我是否正确......
谢谢。