2012-05-10 3 views
3

mysqldumpを使わずにMySQLデータベースをダンプするにはどうすればいいですか?Pythonでmysqldumpを使わずにMySQLデータベースをダンプする方法

+3

なぜmysqldumpを使用しないのですか? mysqldumpへのシステムコールの作成は、これまでにない最も簡単な方法になります。 –

+5

これはプログラミングに関する質問ではありません。これは「私の問題を不必要に困難にする方法」です。 –

+1

私は自分のアプリケーションを非常に小さな依存性でポータブルにしたい。私の理由はMySQLdumpを使用していません –

答えて

10

私はこの問題を解決しました。

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

少しのテストからうまくいくと思われます。

+1

'pymysql'は純粋なPythonでPython 2.7とPython 3.Xで動作する' MySQLdb'に代わるものです。 –

+0

それは良い努力だが悲しい部分です、MySQLdb does notはデータベースをダンプするための呼び出しを提供する代わりに、クエリを実行し、手動でファイルに手動で追加する必要があるでしょう –

+1

ちょうど追加する: 'data'変数に追加するのではなく、ファイルにまっすぐ書いてシステムのメモリを節約することができます。 ex: 'FILE.write(" DROP TABLE ... " – Aaron

3

私はMySQLdbをアドバイスします - それはPython用のMySQL APIを提供します。

ただし、ほとんどの場合、APIはmysqldumpへの間接呼び出しを行います。 mysqldumpに直接電話するか、まったく電話したくないですか?

Dump tables and dataをチェックして、MySQLdbなしでテーブル構造とデータをダンプする正確な手順が表示されるようにすることもできます。

関連する問題