Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mein Programm kann keine Werte in MySQL mit mysql connector lib in Python speichern

Du machst hier gefährliche Dinge:

Keine Zeichenfolgenformatierung (SQL-Injection)

Wegen der SQL-Injection sollten Sie keine String-Formatierung verwenden. Es ist auch komplizierter, wenn Sie größeren SQL-Code haben. Verwenden Sie eine vorbereitete Anweisung wie:

query = "INSERT INTO id(email,passw) VALUES(%s,%s)"
args = (email, passw)
mycursor.execute(query, args)

DB/Tabelle nicht ständig neu erstellen

Ihr Code ist dazu bestimmt, jedes Mal fehlzuschlagen, da er keine neue Datenbank mit demselben Namen erstellen kann, wenn sie bereits vorhanden ist. Das gleiche mit Tisch. Ich würde vorschlagen, ein Setup-Skript zu erstellen. Außerdem können Sie die Datenbank in den Connector stellen und müssen nicht mycursor.execute("USE login;") verwenden

mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    passwd="",
    database='login'
)

verpflichten

Der mysql-Connector führt standardmäßig kein Autocommit durch, siehe:https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html

Sie müssen es also nach der Hinrichtung selbst tun.

mydb.commit()

Der Code sollte am Ende so aussehen:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    passwd="",
    database='login'
)

mycursor = mydb.cursor()

# sign up
email = input("Your email: ")
passw = input("Your password: ")
confirm_pass = input("Confirm password: ")

if passw == confirm_pass:
    print("Successfuly registered!")

    query = "INSERT INTO id(email,passw) VALUES(%s,%s)"
    args = (email, passw)
    mycursor.execute(query, args)
    mydb.commit()

else:
    print("wrong password!")