Importieren von phpMyAdmin Dumps

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
raabe
User
Beiträge: 1
Registriert: Donnerstag 12. November 2020, 20:13

Hallo zusammen,

Ich möchte gerne generierte Dumps aus phpMyAdmin mit Python3 in eine andere MySQL Datenbank importieren.

Könnt ihr mir sagen, was die beste und kompatible Weg ist?

Vielen Dank.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

warum willst du den Weg via Python gehen? Du kannst den Dump doch direkt über die Kommandozeile machen, siehe Link.

Wenn dir danach ist kannst du das aus Python heraus auch über eine Aufruf `subprocess` Moduls verpacken, macht aber eher wenig Sinn.

Gruß, noisefloor
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das kann man eigentlich außerhalb von Python machen. Du brauchst nur mysqldump zum Sichern und mysql um den Dump zurück zu spielen.
Könnte man mit subprocess aufrufen:

Code: Alles auswählen

import subprocess


def dump(database, username, password, outputfile):
    cmd = ["mysqldump", f"-user={username}", f"-password={password}", "-q", database]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    with open(outputfile, "wb") as file:
        while chunk := proc.stdout.read(1024):
            file.write(chunk)


def restore(database, username, password, dump):
    cmd = ["mysql", f"-user={username}", f"-password={password}", database]
    proc = subprocess.Popen(cmd, stdin=subprocess.PIPE)
    with open(dump, "rb") as file:
        for line in file:
            proc.stdin.write(line)

Die Konstruktionen mit Popen sind aber ziemlich wackelig. Wenn man nicht genau weiß was man macht und wo es überall knallt, hat man ziemlich schnell Datenmüll in der Datenbank oder im Dump.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: Warum willst Du unbedingt die Daten über PIPEs schaufeln?

Code: Alles auswählen

import subprocess

def dump(database, username, password, outputfile):
    cmd = ["mysqldump", f"-user={username}", f"-password={password}", "-q", database]
    with open(outputfile, "wb") as file:
        subprocess.run(cmd, stdout=file)

def restore(database, username, password, dumpfile):
    cmd = ["mysql", f"-user={username}", f"-password={password}", database]
    with open(dump, "rb") as file:
        subprocess.run(cmd, stdin=file)
Antworten