Python Flask MySQL

  • Hallo,

    ich arbeite mich gerade mit dem Buch "Flask by Example" in das Thema Flask ein. Das Buch ist gut geschrieben, leider klappt

    aber alles nicht so Reibungslos, wie es im Buch beschrieben ist. In dem Buch erarbeitet man drei Projekte. Das erste Projekt konnte ich Dank der Hilfe des Forums abschließen (siehe Flask und Apache2). Daher hoffe ich, dass Ihr mir auch diesmal weiterhelfen könnt.

    Im aktuellen Projekt geht es darum, mit Python und MySQL den Umgang mit der Datenbank zu erlernen.

    Dazu habe ich mysql-server und pymysql installiert.

    Als nächstes sollte ich ein "Database" Script anlegen. Der Projektname ist crimemap.

    In db_setup.py steht:

    Als nächstes habe ich die Datei dbconfig.py erstellt, welche den db_usernamen und db_password beinhaltet.

    Führe ich das Pythonskript aus:

    Code
    python db_setup.py

    kommt folgender Warnhinweis:

    Code
    /home/pi/.local/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1007, "Can't create database 'crimemap'; database exists")
    result = self._query(query)

    Es steht dort, dass die database schon existiert, obwohl sie vorher noch nicht da war.

    Gehe ich in MySQL kann ich die database "crimemap" finden. Es wurden aber keine "TABLES" angelegt.

    Kontrolliert habe ich dies mit:

    Code
    SHOW DATABASES
    USE crimemap
    SHOW TABLES

    Dort steht, dass keine Tables angelegt sind, obwohl im Pythonskript dies ja so vorgeshen ist.

    Nun bin ich verunsichert. Ist das normal oder besteht ein Fehler im Code?

    Vielleicht könnt Ihr Anhand meiner Beschreibung erkennen, wo der Fehler liegt. Ist ja manchmal nur eine Kleinigkeit mit

    großer Wirkung.

    Ich freue mich auf Eure Tipps!!!

    Gruß

    Stella

  • Hallo,

    Danke für Eure Tipps.

    Mehrere Augen sehen doch besser als zwei :)

    Habe den Schreibfehler korrigiert und habe eine erneute Fehlermeldung erhalten, dass

    im Syntax was nicht stimmt. Habe noch zusätzlich ein Komma weggelassen. Nach dem ich beide Schreibfehler korrigiert hatte, habe ich das Programm erneut laufen lassen.

    Die ursprüngliche Fehlermeldung bleibt, aber wenn ich in MySQL gehe hat sich was geändert.

    Wenn ich

    Code
    USE crimemap
    SHOW TABLES

    erscheint folgendes:

    Code
    +--------------------+
    | Tables_in_crimemap |
    +--------------------+
    | crimes             |
    +--------------------+
    1 row in set (0.00 sec)

    Das war vorher nicht. Es kam ja immer der Hinweis, dass keine Tables vorhanden sind.

    Für mich sieht es aufjedenfall schon mal besser aus. Ist das aber jetzt so ok, dass ich im weiteren Schritt über ein Flask-Programm Daten in dieser Datenbank hinterlegen kann?

    Wo sind die Spalten die angelegt werden sollten? Muss ich einen anderen MySQL Befehl eingeben um die Inhalte zu sehen?

    Gruß

    Stella

  • Hallo,

    willst bzw. musst du MySQL einsetzen oder nimmst du das nur, weil's im Buch steht? Wenn letzteres zutrifft, dann Wechsel auf SQLite. Dann sind diverse Sachen einfacher.

    Schlägt das Buch eigentlich nicht vor, direkt SQLAlchemy für die Datenbankanbindung zu nehmen? Das wäre eigentlich der konsequentere und bessere Weg - gerade, wenn du später mal ein "richtiges", größeres Projekt hast. Für SQLAlchemy gibt es ein Flask-Modul.

    Gruß, noisefloor

  • sls:

    Danke für den Tipp. Alles ist da :-).

    noisefloor:

    MySQL wird im Buch vorgeschlagen und auch die Entwicklungsschritte zum Aufbau der Web-Application sind darauf bezogen. Im Buch wird darauf hingewiesen das Object-relational Mapping(ORM) zum jetzigen Zeitpunkt nicht eingesetzt wird. Es heißt, dass es ohne ORM umständlicher ist aber für das Lernen erstmal gut ist es ohne zu machen, damit man später besser erkennen kann, wo ORM eine Unterstützung darstellt.

    Fällt SQLAlchemy in diese Gruppe? Da das Buch Schritt für Schritt das Projekt komplexer macht, kann es sein, dass in späteren Kapiteln noch darauf eingegangen wird.

    SQLAlchemy wurde aber bisher nicht erwähnt.

    Verwendet man SQLite in gleicher Weise wie MySQL, so dass ich die Codebeispiele des Buches übernehmen kann?

    @Alle:

    Danke für Eure schnelle Hilfe!!!

    Gruß

    Stella

  • Für mich sieht es aufjedenfall schon mal besser aus. Ist das aber jetzt so ok, dass ich im weiteren Schritt über ein Flask-Programm Daten in dieser Datenbank hinterlegen kann?

    Wo sind die Spalten die angelegt werden sollten? Muss ich einen anderen MySQL Befehl eingeben um die Inhalte zu sehen?

    Mal so eingeworfen:

    Auch wenn du dich dem Flask-Modul bedienst, ist es zumindest äußerst hilfreich, Grundkenntnisse in MySQL zu haben (zumindest, wenn du diese DB benutzt).

    MySQL hat eine hervorragende Dokumentation (z.B. https://dev.mysql.com/doc/refman/5.5/en/ für die MySQL Version 5.5, andere sind unter https://dev.mysql.com/doc/ zu finden...

    Da findest du dann auch die Befehle, die dir die Tabellen bzw. deren Struktur anzeigen.

    Auch sehr nützlich:

    • MySQL Workbench (Linux und wohl auch für Windows verfügbar)
    • phpmyadmin (https://www.phpmyadmin.net/), das ist eine php-Applikation, die man unter Windows oder Linux installieren kann.

    Mit diesen Tools kannst du SQL-Sequenzen manuelle austesten bzw. generieren lassen...

  • Hallo,

    ja, SQLAlchemy ist ein ORM. Bzw. es ist _DAS_ ORM für Python. Es macht schon Sinn, dass man ein paar SQL-Grundlagen kennt, wenn man mit einem ORM arbeitet. Dann versteht man in der Regel besser, was "unter der Haube" läuft. Nur lernt man SQL halt besser mit ein SQL Buch oder Tutorial und nicht einem Flask-Tutorial ;)

    Zu SQLite: jein. Das Grundprinzip ist es das gleiche (weil die Python DB API 2.0 genutzt wird). Die Verbindung zu SQLite funktioniert etwas anders, weil SQLite einfach nur eine Datei ist und SQLite hat andere (weniger) Datentypen als MySQL. Wenn man weiß wie, kann man die Bespiele relativ problemlos übertragen - wenn man Einsteiger ist dann wohl eher nicht :)

    Macht dann also hier vielleicht doch Sinn, für dich bei MySQL zu bleiben. Erstmal :)

    Gruß, noisefloor

  • Zentris:

    Du hast recht, dass Grundkenntnisse für MySQL hilfreich sind, wenn man mit Flask MySQL nutzen möchte. Habe auf der Internetseite schon mal reingeschaut und ein paar Seiten heruntergeladen.

    Danke für die Tipps.

    noisefloor:

    Das Buch erklärt es eigentlich ganz gut, verweißt aber auch darauf, dass es sinnvoll ist sich tiefer mit Datenbanken auseinanderzusetzen. Schwerpunkt ist natürlich die Nutzung von Flask.

    Danke für Deine Erklärungen, die einiges nochmal verständlicher machen.

    Bin mal gespannt ob im weiteren Buchverlauf noch SQLAlchemy auftaucht.

    Wie Du schreibst, werde ich erstmal bei MySQL bleiben, da ich noch Zuwenig Hintergrundwissen habe und schon auf die Erklärungen im Buch angewiesen bin. Werde aber SQLite im Hinterkopf behalten.

    Gruß

    Stella

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!