subprocess + mysqldump = encodnig Problem :(

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 15. Juni 2006, 20:33

Ich dachte eigentlich hätte ich das encoding Thema im Griff... Dem ist aber wohl nicht so ganz...

Ich rufe mysqldump per subprocess auf. process.stdout.read() liefert mir einen String... Nur in welchem Encoding???

Ausschnitt aus PyLucid's system_info:

Code: Alles auswählen

sys.stdin.encoding:
    Error: Object has no .encoding!
sys.stdout.encoding:
    Error: Object has no .encoding!
sys.stderr.encoding:
    Error: Object has no .encoding!
sys.getdefaultencoding():
    ascii
sys.getfilesystemencoding():
    Error: 'module' object has no attribute 'getfilesystemencoding'
locale.getlocale():
    (None, None)
locale.getdefaultlocale():
    (None, None)
locale.getpreferredencoding():
    Error: 'module' object has no attribute 'getpreferredencoding'
Irgendwie ist nichts brauchbares dabei :(

ascii ist zumindest nicht wirklich was... Ich möchte schon gern Umlaute im Dump sichern können...

Ein Test mit latin1 und utf8 brachte nur ein UnicodeError...

Das ganze läuft auf:
  • Linux - infong275 - 2.6.16.13-20060523a-areca - #1 SMP Tue May 23 17:47:33 CEST 2006 - i686
    Python v2.2.1 (#1, Aug 25 2004, 16:56:05) [GCC 2.95.4 20011002 (Debian prerelease)]
    mysqldump Ver 10.10 Distrib 5.0.16, for pc-linux-gnu (i686)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 15. Juni 2006, 21:02

Ich hab gerade gesehen, ist gibt SHOW CREATE TABLE tbl_name http://dev.mysql.com/doc/refman/4.1/en/ ... table.html

Wenn es nun noch was gibt für die eigentlichen Werte, brauche ich das Kommandozeilen Programm mysqldump überhaupt nicht ;)

Gefunden hab ich allerdings nicht's in dieser Richtung :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 15. Juni 2006, 21:22

jens hat geschrieben:Ich möchte schon gern Umlaute im Dump sichern können...
Hi Jens!

Ich habe gerade etwas in der Man-Page von **mysqldump** gefunden. **--default-character-set=**.

Allerdings weiß ich sonst nichts über diesen Parameter. Die Hilfe ist nicht gerade redselig.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 15. Juni 2006, 21:27

**--default-character-set=** scheint nur für die Sortierung zuständig zu sein...

PS: oder doch nicht? Die vielen widersprüchlichen Informationen, die ich so über Google finde... Gleich auf PostgreSQL setzen ist gesünder. :evil:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 16. Juni 2006, 06:29

Eigentlich gibt default-character-set schon an in welchem encoding der DUMP erstellt wird:
Use charset_name as the default character set. See Section 5.10.1, “The Character Set Used for Data and Sorting”. If not specified, mysqldump from MySQL 4.1.2 or later uses utf8, and earlier versions use latin1.
http://dev.mysql.com/doc/refman/4.1/en/mysqldump.html

Klappen tut das aber leider nicht. Denn entweder ist es latin1 oder utf8, aber das umwandeln in unicode klappt damit auch nicht...

Bei subprocess benutzte ich shell=True. Vielleicht werden die Ausgaben von der shell verändert?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 19. Juni 2006, 08:16

Ich hab es mal mit shell=False probiert, aber irgendwie klappt das einfach nicht. Ich gebe zwar den vollständigen Pfad an (der auch richtig ist), aber dennoch bekomme ich immer nur zurück, das mysqldump nicht gefunden wurde :(

Also muß es über die Shell gehen...

Ich hab gesehen das subprocess.PIPE (also process.stdout) ein encoding Attribut besitzt. Leider ist das aber == None ;(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten