如果不在Python中使用mysqldump,如何转储MySQL数据库
我如何在不使用mysqldump的情况下转储一个MySQL数据库,而只使用包含表结构的Python?我建议-它为Python提供了一个MySQL API 但是,API很可能间接调用了如果不在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
。您不想直接或根本不想调用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这是否忽略外键/约束和其他有关数据库的信息?”?