如果不在Python中使用mysqldump,如何转储MySQL数据库

如果不在Python中使用mysqldump,如何转储MySQL数据库,python,mysql,Python,Mysql,我如何在不使用mysqldump的情况下转储一个MySQL数据库,而只使用包含表结构的Python?我建议-它为Python提供了一个MySQL API 但是,API很可能间接调用了mysqldump。您不想直接或根本不想调用mysqldump 您可能还想查看在不使用MySQLdb的情况下转储表结构和数据(沿页面向下)的确切过程显示在何处。我已经解决了这个问题 import MySQLdb import os import datetime con = MySQLdb.connect(host

我如何在不使用mysqldump的情况下转储一个MySQL数据库,而只使用包含表结构的Python?

我建议-它为Python提供了一个MySQL API

但是,API很可能间接调用了
mysqldump
。您不想直接或根本不想调用
mysqldump


您可能还想查看在不使用MySQLdb的情况下转储表结构和数据(沿页面向下)的确切过程显示在何处。

我已经解决了这个问题

import MySQLdb
import os
import datetime

con = MySQLdb.connect(host='localhost', user='root', passwd='password', db='test')
cur = con.cursor()

cur.execute("SHOW TABLES")
data = ""
tables = []
for table in cur.fetchall():
    tables.append(table[0])

for table in tables:
    data += "DROP TABLE IF EXISTS `" + str(table) + "`;"

    cur.execute("SHOW CREATE TABLE `" + str(table) + "`;")
    data += "\n" + str(cur.fetchone()[1]) + ";\n\n"

    cur.execute("SELECT * FROM `" + str(table) + "`;")
    for row in cur.fetchall():
        data += "INSERT INTO `" + str(table) + "` VALUES("
        first = True
        for field in row:
            if not first:
                data += ', '
            data += '"' + str(field) + '"'
            first = False


        data += ");\n"
    data += "\n\n"

now = datetime.datetime.now()
filename = str(os.getenv("HOME")) + "/backup_" + now.strftime("%Y-%m-%d_%H:%M") + ".sql"

FILE = open(filename,"w")
FILE.writelines(data)
FILE.close()

通过一点测试,它似乎工作得很好

为什么没有mysqldump?到目前为止,对mysqldump进行系统调用将是最简单的方法。这不是编程问题。这是一个“我怎样才能使我的问题变得不必要的困难”的问题。我希望我的应用程序具有可移植性,并且几乎没有依赖性。我不使用mysqldump的原因我无法对我的提供者使用
mysqldump
,但我可以使用SQL查询。我认为这个问题很有趣,应该重新开始。我认为这是一个完全正确的问题。我遇到过几个主机,它们使用不同的(专用的)服务器来处理web应用程序和数据库。在这些情况下,mysqldump在web应用程序服务器上不可用,不能用于备份目的。请注意,
pymysql
是纯Python的MySQLdb的替代品,它与Python 2.7和Python 3.X一起工作。这是一项很好的工作,但遗憾的是,MySQLdb不提供转储数据库的调用,相反,我们将不得不执行查询并获取响应,需要手动将其追加到文件中,这是一个漫长的过程。只需添加:您可以通过直接写入文件而不是追加到
数据
变量来节省一些系统内存。例如:
FILE.write(“DROP TABLE…
有意义@AronIs这是否忽略外键/约束和其他有关数据库的信息?”?