Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mon programme ne peut pas stocker de valeurs dans MySQL à l'aide de la bibliothèque de connecteurs mysql en Python

Vous faites des choses dangereuses ici :

Pas de formatage de chaîne (injection SQL)

Vous ne devriez pas utiliser le formatage de chaîne à cause de l'injection SQL. C'est également plus compliqué lorsque vous avez un code SQL plus volumineux. Utilisez une déclaration préparée comme :

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

Ne créez pas DB/Table new tout le temps

Votre code est voué à échouer à chaque fois car il ne peut pas créer une nouvelle base de données avec le même nom si elle existe déjà. Idem avec tableau. Je suggérerais de créer un script d'installation. Vous pouvez également mettre la base de données dans le connecteur et ne pas avoir à utiliser mycursor.execute("USE login;")

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

s'engager

Le connecteur mysql ne s'engage pas automatiquement par défaut voir :https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html

Vous devez donc le faire vous-même après l'exécution.

mydb.commit()

Le code devrait ressembler à ceci à la fin :

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!")