MySQLdb hilfe bei User Input

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Tom12
User
Beiträge: 48
Registriert: Mittwoch 17. Januar 2018, 17:38

Hallo ich komme wieder mal nicht mehr weiter.
Ich habe eine Datenbank auf einem Webserver (MySQL) und möchte diese nun mit einem Pyhton script verbinden,
sodass ich Daten abfragen und hinzufügen kann.
Ich nutze das Modul MySQLdb aber mein Code funktioniert nicht und ich weiß nicht wieso.
Bitte um hilfe
Bisheriger Code:

import MySQLdb
import sys

try:
conn = MySQLdb.connect("localhost", "root", "", "nachrichten")
except:
prnt("Keine Verbindung zum Server möglich")

cur = conn.cursor()
eingabe = input()
#staff_first=raw_input("Whats your message ?")

cur.execute = ("INSERT INTO news (neues) VALUES(`" + eingabe + "`)")


er baut die Verbindung auf aber irgendetwas stimmt mit dem teil hinter VALUES nicht.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

so funktioniert das auch nicht. Du musst den Wert, den du Einfügen willst, dem SQL-Query als Parameter mitgeben und _nicht_ selber den String zusammenstückeln. Da die offizielle MySQDB Doku nicht erreichtbar ist (was BTW schon mal stark gegen das MySQLDB Modul spricht), hier ein Link auf eine alternative Doku: https://www.tutorialspoint.com/python/p ... access.htm

Fehler Nr 2: keinen Spaghetticode schreiben und den User Input mit dem Code für den DB Zugriff mischen. Kapsle das ganze sinnvoll aufgeteilt in Funktionen.

Und keine nackten try...except verwenden. Damit fängst du _alle_ Fehler ab, auch Programmierfehler. Fehler fängt man gezielt ab.

Und wenn du schon einen Webserver hast - warum bastelst du dir nicht ein HTML-basiertes Frontend, um Daten in die DB zu schreiben? So oder so solltest du die Daten auch validieren, bevor du "irgendwas" in die DB schreibst.

Gruß, noisefloor
Tom12
User
Beiträge: 48
Registriert: Mittwoch 17. Januar 2018, 17:38

Hallo noisefloor,
Dieses Script ist praktisch mein "Testgebiet" also ist mir vorerst der Spaghetticode egal.
Wie soll ich der SQL-Query den Input als Parameter mitgeben ?
bin noch neu in der Programmierung und Python ist meine erste Sprache die ich lerne deshalb beschränkt sich mein HTML wissen auch noch
auf "Wie gestalte ich eine Webseite"

MfG tom
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

execute ist eine *Methode*. Die rufst du auf, so wie du ja auch cursor() aufgerufen hast. Du versuchst aber, execute einen Ausdruck zuzuweisen. Das hilft halt nicht.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Dieses Script ist praktisch mein "Testgebiet" also ist mir vorerst der Spaghetticode egal.
Schlechter Programmierstil ist nie egal, auch nicht beim Hausgebrauch.
Wie soll ich der SQL-Query den Input als Parameter mitgeben ?
Das ist in Anleitung erklärt, die ich im vorherigen Post verlinkt habe... Musste halt mal ganz lesen.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

I don't use the MySQL connector because official and Oracle doesn't necessarily mean it's the best, or even good. SQLAlchemy discourages its use: http://docs.sqlalchemy.org/en/latest/di ... ent-issues

Regarding the source code you gave: Under which circumstances does `connection.is_connected()` return `False` right after a successful `connect()` call?

`record` isn't a good name for a sequence of records — plural.

Edit: `is_connected()` isn't portable BTW — it's not part of the DB API V2.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten