Datenbank auslesen, EAN-Code generieren und andere Probleme

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sugo71
User
Beiträge: 4
Registriert: Montag 11. Januar 2016, 17:56

Hallo, ich bin ein ziemlicher Anfänger, was Python- und Sqlite Programmierung angeht.
Folgendes Problem muss gelöst werden:
Ein Raspi2 soll einen EAN13-Code generieren und ausdrucken.


Der EAN13Code setzt sich wie folgt zusammen beziehungsweise muss noch die Checksumme berechnet werden:

123 xxxx yyyyy z

123 ist ein konstantes Präfix
xxxx ist eine laufende Nummer
yyyyy ist ein Geldwert in Cent
z ist die Checksumme

Das Problem:
1. Wie setze ich die ersten 12 Ziffern in einen Wert zusammen,um ihn danach an einen
Checksummen-Generator zu übergeben?
2.Die laufende Nummer ist in einer Sqlite3-DB gespeichert. Beim auslesen mit
SELECT lfdnr FROM tabelle ORDER BY lfdnr DESC LIMIT 1
lfdnr = dbcursor.fetchone()
erhalte ich z.B.
(15,)
aber ich benötige nur die 15, die führenden Stellen sollen dann mit Nullen aufgefüllt werden.

Ich bin für jede Hilfe dankbar!
BlackJack

@sugo71: Welches Tutorial oder Buch hast Du denn durchgearbeitet? Setz Dich mal mit Zeichenkettenformatierung (`str.format()`) und Grunddatentypen auseinander. In der Dokumentation zum `sqlite3`-Modul gibt es auch so einige Beispiel für `fetchone()` bei denen die Abfrage einen einzelnen Wert enthält. Und eine kurze Beschreibung was die Methode zurück gibt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Noch so als Tipp. (15,) ist nichts anderes als:

Code: Alles auswählen

x = (1, 2,3, 4)
y = [5, 6, 7, 8]
Da würdest du doch auch schaffen an das erste, zweite oder dritte Element zu kommen oder?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@sugo71: die SQL-Abfrage wäre für mich als

Code: Alles auswählen

SELECT max(lfdnr) FROM tabelle
viel verständlicher.
BlackJack

Nicht nur verständlicher sondern auch SQL-Standard, was LIMIT nicht ist.
sugo71
User
Beiträge: 4
Registriert: Montag 11. Januar 2016, 17:56

Zuerst: Danke an alle, die sich die Zeit genommen haben, mir zu antworten!

Nochmal in eigener Sache:
Ich bin 44,habe das letzte mal 1992 mit Sprachen gearbeitet, zwischendurch mal ne Datenbank zusammengeclickt, mal ein bisschen SQL gelernt - und das war's auch.
Meine Linux-Fähigkeiten beschränkten sich bis vor kurzen noch auf "cd" und "ls".

Seit acht Wochen habe ich jetzt einen Raspi am Start...der soll mit einem kleinen Thermodrucker EAN13-codierte Bons ausdrucken...und ich habe in den letzten Wochen
100te Foren, Tutorials und Docs angesteuert. Meistens habe ich auch gefunden,wonach ich
gesucht habe, konnte Code-Beispiele nutzen oder freien Code für mich umbauen.
Aber manchmal habe ich das berühmte Brett vor dem Kopf oder es mangelt an Grundkenntnissen. Dann muss ich tatsächlich mal eine Frage in einem Forum stellen.

Ich habe noch keine komplette Docu "durchgearbeitet " - weder über Raspbian, Tkinter,
noch über Python oder Sqlite - es ist ein (leicht ausuferndes) Freizeitprojekt, und das soll
es auch bleiben. Oder macht jemand von euch eine Ausbildung zum KFZ-Mechaniker, weil
er ne Zündkerze wechseln will? Daher bitte ich um Nachsicht!


@Sirius
Vielen Dank dafür...das "max" kannte ich nicht, macht die Sache aber gleich viel einfacher und eleganter. 8)

@Sr4l: Danke für den Schubs in die richtige Richtung-habe jetzt meine einfache Zahl,mit der ich weiterarbeiten kann :D

@BlackJack Ich weiß, mein Listing erfüllt weder Standards noch sonstige Anforderungen,die
ein Berufsprogrammierer stellen würde-deshalb stelle ich den kompletten Code auch
(noch) nicht ins Forum. Dann würde ich nämlich keine Hilfe, sondern nur Sprüche darüber
ernten, was man nicht alles anders,besser,toller machen muss. Mir geht's im Moment
aber nur um Funktion. Habe hier leider schon etliche Beiträge gelesen,bei denen der Verfasser
des OP nur niedergemacht wurde, anstatt konkrete Hilfe zur Selbsthilfe anzubieten.
Meine Bitte an Dich: Welches Tutorial für Sqlite würdest du empfehlen?


Nochmal Danke an alle - noch 2-3 Problemchen, dann läuft mein Projekt...sollte ich die nicht
alleine lösen können,gehe ich euch gerne wieder auf die Nerven :D

Viele Grüße, Sugo
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

sugo71 hat geschrieben:Habe hier leider schon etliche Beiträge gelesen,bei denen der Verfasser
des OP nur niedergemacht wurde, anstatt konkrete Hilfe zur Selbsthilfe anzubieten.
Wer konstruktive Kritik als Niedermachen empfindet, der hat IMHO ein generelles Problem mit Kritik.

Wenn begründet wird, warum XY schlecht ist und wenn idealerweise Verbesserungsvorschläge mitgegeben werden, dann sollte man dies keinesfalls als Beleidigung oder ähnliches empfinden, sondern man sollte es als Anstoß sehen, sich zu verbessern.

Eine ausführliche Kritik zeigt, dass sich der Kritisierende mit dem Code beschäftigt hat. Viel schlimmer ist doch ein: "Der Code ist so grausig, ich habe mich erst gar nicht damit befasst."
BlackJack

@sugo71: Für das wechseln einer Zündkerze würde man keine Kfz-Mechanikerausbildung machen, aber Programme schreiben ist ja wohl auch eher so etwas wie einen Motor selber bauen, und das ist eben nicht mal eben so gemacht oder gelernt.

Gerade bei den Grundlagen sollte es keine Nachfragen geben, ausser eben zu den Grundlagen selber und nicht im Kontext eines viel komplexeren Problems, denn die Grundlagen sind, nun ja, *grundlegend*. Da erwarten die meisten die helfen möchten, dass der Fragesteller sich die vorher erarbeitet hat, denn sonst läuft es darauf hinaus das der Antwortende das Problem löst und der Fragesteller dabei sehr wenig bis gar nichts gelernt hat, ausser das man ihm seine Probleme löst wenn er fragt. Der Fragesteller kann Glück haben das es trotzdem jemand macht, aber auf Dauer funktioniert das nicht. Und auch eher bei Problemen die interessant sind, wo der Antwortende auch noch etwas lernen kann, also eher nicht bei den Grundlagen.

Wenn Dein Quelltext keine Standards oder sonstige Anforderungen erfüllt, dann solltest Du daran arbeiten. Ein „Hauptsache es funktioniert“ funktioniert nicht wirklich. Denn man will ja eigentlich nicht das es irgendwie funktioniert, sondern man möchte auch nachvollziehen können wie und warum es funktioniert, um sich sicher sein zu können, das es tatsächlich funktioniert, und nicht nur scheinbar oder zufällig. Man kann die Zündkerze auch mit dem Hammer in die Fassung bringen und sie dann mit Klebeband fixieren, und das mag auch ”funktionieren”, trotzdem würden die meisten doch mehr vertrauen in das Konstrukt haben wenn die Zündkerze ordentlich und wie vorgesehen eingesetzt wird.

Auch wenn's noch nicht komplett und noch im Alpha-Stadium, ist Learn SQL The Hard Way IMHO ein ganz guter praktischer Einstieg in SQL, und der Autor verwendet SQLite als Datenbank weil man das einfach installieren kann ohne ein grösseres DBMS konfigurieren zu müssen.

Für das beschriebene Problem könnte vielleicht auch Autoincrement In SQLite interessant sein, dann musst Du das nicht selber abfragen/ausrechnen.
sugo71
User
Beiträge: 4
Registriert: Montag 11. Januar 2016, 17:56

Es funktioniert! Ihr habt mit Eurer Hilfe einen alten Mann sehr glücklich gemacht :D

@BlackJack: Danke für die Links! Gerade "Learn Sql..." ist ein Tutorial, mit dem ich mich
sicherlich länger beschäftigen werde,ohne die Lust am Lernen zu verlieren. Und dank deiner
Hinweise, mir nochmal Datentypen und Formatierung näher anzuschauen, konnte ich die
letzten Probleme auch noch lösen. Ich kann nachvollziehen,warum was wann passiert,
jetzt gehts ans Feintunen. Bin noch, um den Motor nochmal zu bemühen, bei "Pumpe A
pumpt Sprit in Behälter, Pumpe B von da in den Verbrennungsraum" und nicht bei "Pumpe A
pumpt Sprit in Verbrennungsraum ".Aber ich arbeite daran 8)


@snafu: Der Grat ist ein schmaler... :wink:
Antworten