Seite 1 von 1
Mysql Syntaxfehler
Verfasst: Samstag 12. Dezember 2020, 19:13
von Charger
Hallo,
wenn ich den Code unten ausführe kommt eine Fehlermeldung, (Zeile 11 ist die Ursache)
wer kann mir helfen?
Code: Alles auswählen
import mysql.connector
try:
conn = mysql.connector.connect\
(host='localhost',
database='newbase',
user='root',
password='Nevada80#')
#Creating a cursor object using the cursor() method
cursor = conn.cursor() ################ Zeile 11, Ursache für den Syntaxfehler #########
#Dropping EMPLOYEE table if already exists.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
#Creating table as per requirement
sql ='''CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
)'''
cursor.execute(sql)
#Closing the connection
conn.close()
################
File "/home/cha......../testmy.py", line 11
cursor = conn.cursor()
^
SyntaxError: invalid syntax
Process finished with exit code 1
Re: Mysql Syntaxfehler
Verfasst: Samstag 12. Dezember 2020, 19:50
von sparrow
Den abschließenden Backslash in Zeile 4 kannst du dir sparen. Das macht den Code füchterlich unleserlich. Wenn du da die öffnende Klammer hin setzt, dann weiß jeder: Alles klar, ist ein Funktionsaufruf. Wie du selbst ja eine Zeile weiter siehst, kann man in der Parameterliste nach den einzelnen Parametern einfach die Zeile umbrechen.
Und wo ein try ist, muss auch ein except sein.
Re: Mysql Syntaxfehler
Verfasst: Dienstag 15. Dezember 2020, 23:01
von Dennis89
Hallo,
Zeile 11 und ff stehen nicht im gleichen Namensraum wie dein 'conn'.
Man hat übrigends keinen Vorteil wenn man Abkürzungen verwendet, eher den Nachteil dass der Code schlecht zu lesen ist.
Code: Alles auswählen
import mysql.connector as connector
try:
connection = connector.connect(
host='localhost',
database='newbase',
user='root',
password='Wuerdeichnichtoeffentlichmachen!'
)
cursor = connection.cursor(buffered=True)
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
sql ='''CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
)'''
cursor.execute(sql)
connection.close()
except:
print('Hier stimmt was nicht')
Habe gerade keine Möglichkeit den Code zu testen.
Grüße
Dennis
Re: Mysql Syntaxfehler
Verfasst: Dienstag 15. Dezember 2020, 23:10
von sparrow
Dennis89 hat geschrieben: Dienstag 15. Dezember 2020, 23:01Zeile 11 und ff stehen nicht im gleichen Namensraum wie dein 'conn'.
@Dennis89: Bist du dir sicher, dass die nicht im selben Namensraum existieren? Aus der interaktiven Session:
Re: Mysql Syntaxfehler
Verfasst: Mittwoch 16. Dezember 2020, 07:16
von Dennis89
Guten Morgen @sparrow
Ich hatte keine Möglichkeit zum testen, aber du kannst natürlich recht haben. Wenn der TE bis heute Abend nicht antwortet, versuche ich es mal.
Bei dieser kurzen Abfrage würde ich es schon sinnvoll finden, alles "unter" 'try' zu setzen oder gibt es Gründe die dagegen sprechen?
Grüße
Dennis
Re: Mysql Syntaxfehler
Verfasst: Mittwoch 16. Dezember 2020, 07:28
von sparrow
@Dennis89: Ich wollte demonstrieren, dass ein try-Block keinen eigenen Namensraum hat. Module, Funktionen, Klassen und deren Instanzen: ja. Jeder Block: Nein.
Was in einen try-Block gehört, kann man pauschal nicht sagen. So viel wie nötig ist, um durch try/except die Ausnahme so zu verarbeiten, dass das Programm hinterher in einem kontrollierten Zustand ist.
Das tust du in deinem Codebeispiel nicht. Im Gegenteil. Du verschluckst die potentielle Fehlermeldungen und gibst stattdessen einen Text aus. Niemals(!) nackte Excepts verwenden, weil die auch Fehler schlucken, mit denen man nicht rechnet. Stattdessen nur die Fehler fangen, die man auch durch den folgenden Except-Block verarbeiten kann.
Und in diesem Fall: wenn man sowieso nichts tut um auf die Ausnahme zu reagieren, ist es besser komplett auf try/except zu verzichten. Dann eskaliert der Fehler nach oben, das Programm stoppt und man bekommt einen wunderschönen traceback mit Fehlermeldung statt eines generischen Fehlertextes, der einem nicht hilft.
Re: Mysql Syntaxfehler
Verfasst: Mittwoch 16. Dezember 2020, 08:12
von Dennis89
@sparrow Danke für die Erklärung.
Werde es in Zukunft berücksichtigen.
Grüße
Dennis