Seite 1 von 1

Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Mittwoch 5. Februar 2014, 23:17
von Sinnentlehrt
Hallo Leute,

bin da ein wenig am verzweifeln, die Afrage läut unter MySQL ganz normal, möchte ich aber die Varialble unter Python abfragen klemmt es. Schätze ist ein Format Fehler aber ich komme nicht dahinter, . Das besondere ist hierbei, das die Variable über die Gimp Fehlerkonsole ausgegen wird, was bestimmt vernachlässigbar ist, weil hat ja sonst auch immer geklappt.

Hier mal die Fehlermeldung:

Code: Alles auswählen

File "/usr/lib/gimp/2.0/python/gimpfu.py", line 699, in response
    dialog.res = run_script(params)
  File "/usr/lib/gimp/2.0/python/gimpfu.py", line 361, in run_script
    return apply(function, params)
  File "/home/gutschy/.gimp-2.8/plug-ins/Id_test_HTML1.py", line 44, in py_Id_test
    gprint("Pizzeria Id:",pizzeria_Id)
TypeError: gprint() takes exactly 1 argument (2 given)
Und hier mal das Testskript, es geht um die Zeilen 42 bis 45. Wie gesagt, der Ausdruck läuft direkt unter MySQL ohne Probleme. Hatte schon überlegt das es sich um ein Tupel handeln könnte, meine Versuche in dieser Richtung brachten mir aber auch nichts:

Code: Alles auswählen

#! /usr/bin/env python2
# -*- coding: utf-8 -*-

from gimpfu import *
import os, time, cgi
import MySQLdb as mdb

# Variablen in Gimp sichtbar mache
def gprint(text):                       
        pdb.gimp_message(text)
        return


# Ein Bild zuschneiden und Daten
def py_Id_test(image, drawable, laden_name, vorwahl, telenr1, telenr2, fax, strasse, \
    hausnr, plz, ort, oeffz1, oeffz2, oeffz3, oeffz4, bestellwert1, bestellwert2, \
    bestellwert3, rumpf_daten, html_name, kartenname, ordner, spaltenanzahl, logo_ordner, \
    logo_name):
    #
    #Umandeln der Sonderzeichen
    laden_name = laden_name.encode("ascii", "xmlcharrefreplace")
    strasse = strasse.encode("ascii", "xmlcharrefreplace")
    ort = ort.encode("ascii", "xmlcharrefreplace")
    bestellwert1 = bestellwert1.encode("ascii", "xmlcharrefreplace")
    bestellwert2 = bestellwert2.encode("ascii", "xmlcharrefreplace")
    bestellwert3 = bestellwert3.encode("ascii", "xmlcharrefreplace")
    #
    #MySQL
    #
    con = mdb.connect('localhost', 'test_user', 'passwort', 'test_db')

    with con:
        cur = con.cursor()
        cur.execute("INSERT INTO test_table(laden_name, vorwahl, telenr1, telenr2, fax, strasse, \
    hausnr, plz, ort, oeffz1, oeffz2, oeffz3, oeffz4, bestellwert1, bestellwert2, \
    bestellwert3, rumpf_daten, html_name, kartenname, ordner, spaltenanzahl, logo_ordner, \
    logo_name) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(laden_name, vorwahl, telenr1, telenr2, fax, strasse, \
    hausnr, plz, ort, oeffz1, oeffz2, oeffz3, oeffz4, bestellwert1, bestellwert2, \
    bestellwert3, rumpf_daten, html_name, kartenname, ordner, spaltenanzahl, logo_ordner, \
    logo_name))

    test_Id = cur.execute("SELECT test_Id FROM test_table WHERE vorwahl=%s AND telenr1=%s",(vorwahl, telenr1))
    #daten1, daten2  = test_Id
    gprint("Test Id:",test_Id)
    #gprint("Test Id:",daten1, daten2)
   
register(
        "Id_Test",
        "Anlegen von Testdaten",
        "Anlegen von testdaten",
        "gutschy",
        "test-company.de",
        "2013",
        "<Image>/MyScripts/Id_Test",
        "*",
        [
        (PF_STRING, "laden_name", "Laden Name:", ""),
        (PF_STRING, "vorwahl", "Vorwahl:", ""),
        (PF_STRING, "telenr1", "Telefonnummer1:", ""),
        (PF_STRING, "telenr2", "Telefonnummer2:", ""),
        (PF_STRING, "fax", "fax:", ""),
        (PF_STRING, "strasse", "Strasse:", ""),
	(PF_STRING, "hausnr", "Hausnummer:", ""),
        (PF_STRING, "plz", "Postleitzahl:", ""),
        (PF_STRING, "ort", "Ort:", ""),
        (PF_STRING, "oeffz1", "Öffnungszeiten1:", ""),
        (PF_STRING, "oeffz2", "Öffnungszeiten2:", ""),
        (PF_STRING, "oeffz3", "Öffnungszeiten3:", ""),
        (PF_STRING, "oeffz4", "Öffnungszeiten4:", ""),
        (PF_STRING, "bestellwert1", "Bestellwert1:", ""),
        (PF_STRING, "bestellwert2", "Bestellwert2:", ""),
        (PF_STRING, "bestellwert3", "Bestellwert3:", ""),
        (PF_STRING, "rumpf_daten", "Rumpf Daten Datei:", "rumpfdaten.txt"),
        (PF_STRING, "html_name", "HTML Name:", "inc.header.php"),
        (PF_STRING, "kartenname", "Kartenname:", ""),
        (PF_DIRNAME, "ordner", "Verzeichnis:", ""),
        (PF_INT, "spaltenanzahl", "Spaltenanzahl:", ""),
        (PF_DIRNAME, "logo_ordner", "Logo Verzeichnis:", "/home/gutschy/Arbeitsfl\xc3\xa4che/gimp/"),
        (PF_STRING, "logo_name", "Logo Name:", "logo.xcf")
                
        ],
        [],
        py_Id_test,
        )
    
main()

Re: Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Mittwoch 5. Februar 2014, 23:34
von BlackJack
@Sinnentlehrt: Jetzt schau Dir doch noch mal genau an wie Du `gprint()` definierst, also wie viele Argumente man da übergeben kann, und dann wie viele Argumente Du tatsächlich übergibst beim Aufruf. Eigentlich sagt die Fehlermeldung das doch auch schon *sehr* deutlich. Was hast Du da denn jetzt erwartet was passiert?

Re: Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Donnerstag 6. Februar 2014, 23:08
von Sinnentlehrt
Hmm, also hatte das ganze schon mal zum String umgeformt und dachte erst an einen SQL Fehler, weil es zu einem seltsamen Ergebnis kam.

Code: Alles auswählen

pizzeria_Id = cur.execute("SELECT test_Id FROM test_table WHERE vorwahl=%s AND telenr1=%s",(vorwahl, telenr1))
string_test_Id = str(test_Id)
gprint("Pizzeria Id String:"+string_test_Id)
Entschuldige, aber wenn du Abends von der Arbeit kommst und eigentlich nur pennen willst dann entfallen dir leider schon mal so ein paar wichtige Details :? . Ja gut, kann aber nicht dein Problem sein.

Hier kommt ein Ergebnis, allerdings zählte dieses die Anzahl der Einträge mit gleicher Nummer. Also wenn ich die Tabelle mit Testdaten fülle dann kommt da 1 raus, wiederholt sich die Nummer dann kommt da 2 raus usw. Aber eigentlich sollte da 17 stehen oder 22 stehen, zumindest der Eintrag wo diese Nummer zum ersten mal vorkommt. In MySQL kommt dann entsprechend eine Tabelle die alle Ids mit der gleichen Nummer aufzählt. Wie ich das Eintragen von Nummer Dubletten in Zukunft unterbinde hab ich aber schon rausgefunden. Nur das Anzeigen der Id, das will mir nicht gelingen.

Re: Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Freitag 7. Februar 2014, 03:18
von noisefloor
Hallo,

sorry, aber ich verstehe den letzten Post nicht...

Der Query liefert genau eine Zahl (test_id) zurück, du schreibst was von Zählen.

Das Ergebnis des SQL-Queries weißt du pizzeria_id zu, danach verarbeitest du aber test_id...

Ist da was durcheinander?

Gruß, noisefloor

Re: Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Freitag 7. Februar 2014, 08:52
von Sirius3
@Sinnentlehrt: das was Du da tust, ist sehr verwirrend. Warum eine Funktion, die 'py_Id_test' heißt und den Kommentar "Bild zuschneiden" trägt, etwas in eine Datenbank einträgt, mußt Du mir erklären. Datenbanken können im Allgemeinen sehr gut mit Unicode umgehen, ein Umwandeln der Sonderzeichen in irgendetwas, was dann nicht mehr einfach zu verarbeiten, z.B. sortieren, ist, verkompliziert die ganze Verarbeitung unnötig. Du solltest Dir auch überlegen, die ganzen Parameter endlich mal in ein Dictionary zu stecken. Mehr als einmal die ganze Liste an Daten zu habe, wäre mir eindeutig zu viel Schreibarbeit. Wenn Du das Ergebnis eines SELECTs haben willst, mußt Du es schon erst fetchen und nicht irgendeinen undefinierten Rückgabewert weiterverarbeiten. Was Du eigentlich suchst ist sowieso wahrscheinlich "cur.lastrowid":

Code: Alles auswählen

    with con:
        cur = con.cursor()
        keys, values = zip(*parameter.items())
        cur.execute("INSERT INTO test_table(%s) VALUES(%s)"%(
            ','.join(keys), ','.join(['%s']*len(keys))
            ), values)
        test_id = cur.lastrowid

Re: Krieg Ergenbnis einer MySQL Abfrage nicht gedruckt.

Verfasst: Samstag 8. Februar 2014, 19:45
von Sinnentlehrt
Hi noisefloor, ja, da ist was durcheinander gekommen. pizzeria_id war ein falscher Eintrag von mir, es hätte immer test_id heissen sollen.

Hi Sirius3, danke das du mich trotz meiner schlechten Ausführungen verstanden hast. Dein Vorschlag hat mein Problem sofort gelöst. Das Skript arbeitet mit Gimp zusammen und es nimmt die Eckdaten für Bilder auf wenn sie vom mir bearbeitet werden, darum der Kommentar Bild zuschneiden.

Bei der Sache mit dem Dictinary kann ich zwar nachvollziehen was du meinst, aber diesen einen Ausdruck verstehe ich nicht.

Code: Alles auswählen

join(['%s']*len(keys)
Ist das sowas wie ein Platzhalter?

MySQL auf Unicode einstellen ist mir leider noch nicht gelungen auch wenn ich theoretisch :lol: eine ganze Ecke weiter bin.

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as mdb

con = mdb.connect('localhost', 'test_id_user', 'sommer', 'Id_db')

with con:
    
    cur = con.cursor()
    cur.execute("DROP TABLE IF EXISTS id_tabelle")
    cur.execute("CREATE TABLE id_tabelle(test_Id INT PRIMARY KEY AUTO_INCREMENT, \
                name VARCHAR(50), vorwahl VARCHAR(15), telenr VARCHAR(20)) \
                default character set 'UTF8' COLLATE utf8_general_ci ")
Ich habe gelesen das der Datenbankbenutzer sich auch mit UTF8 anmelden soll, ich weiß aber nicht wie ich das schreiben soll. Leider ist mit dieser Form auf jeden Fall kein UTF8 drin.

Und hier ist wohl der Grund dafür.

Code: Alles auswählen

| character_set_client                              | utf8                                                                                                                   |
| character_set_connection                          | utf8                                                                                                                   |
| character_set_database                            | latin1                                                                                                                 |
| character_set_filesystem                          | binary                                                                                                                 |
| character_set_results                             | utf8                                                                                                                   |
| character_set_server                              | latin1                                                                                                                 |
| character_set_system                              | utf8                                                                                                                   |
| character_sets_dir                                | /usr/share/mysql/charsets/                                                                                             |
| collation_connection                              | utf8_general_ci                                                                                                        |
| collation_database                                | latin1_swedish_ci                                                                                                      |
| collation_server                                  | latin1_swedish_ci  
Nur wie stelle ich es ein. Was ich finde ist meist für PHP und ganz begreifen tue ich es auch nicht.

Und ich würde dich gerne noch fragen woran mein Versuch gescheitert ist, denn ich glaube diesen Ansatz noch mal irgendwann gut gebrauchen zu können. Es geht um die Zeilen 26 bis 28. Ähm, was ist fetchen :oops: . Wird viel benutzt.... In diesem Codebeispiel habe ich versucht alles auf das Wesentliche zu begrenzen.

Code: Alles auswählen

#! /usr/bin/env python2
# -*- coding: utf-8 -*-

from gimpfu import *
import os, time, cgi
import MySQLdb as mdb

# Variablen in Gimp sichtbar mache
def gprint(text):                       
        pdb.gimp_message(text)
        return


# Ein Bild zuschneiden und Daten
def py_Id_test2(image, drawable, name, vorwahl, telenr):
    #
    #MySQL
    #
    con = mdb.connect('localhost', 'test_id_user', 'sommer', 'Id_db')

    with con:
        cur = con.cursor()
        cur.execute("INSERT INTO id_tabelle(name, vorwahl, telenr) VALUES(%s,%s,%s)", \
        (name, vorwahl, telenr))

    #test_Id = cur.execute("SELECT test_Id FROM id_tabelle WHERE vorwahl=%s AND telenr=%s",\
    #(vorwahl, telenr))
    #string_test_Id = str(test_Id)
    lr_test_id = str(cur.lastrowid)
    gprint("Test Id String:"+lr_test_id)
       
    
register(
        "Id_Test2",
        "Id Test2",
        "Id Test Python Forum",
        "Sinnentlehrt",
        "test-company.de",
        "2013",
        "<Image>/MyScripts/Id_Test2",
        "*",
        [
        (PF_STRING, "name", "Name:", ""),
        (PF_STRING, "vorwahl", "Vorwahl:", ""),
        (PF_STRING, "telenr", "Telefonnummer:", ""),
                
        ],
        [],
        py_Id_test2,
        )
    
main()
Ja, sorry für den vielen Text, aber du weißt ja, wenn man den kleinen Finger gibt.

Gruss,

sinnie