我的程序无法使用 Python 中的 mysql 连接器库将值存储在 MySQL 中

My program is not being able to store values in MySQL using mysql connector lib in Python

我正在使用 MySQL connector 库在 Python 中构建一个 login/signup 程序。我的代码无法在 MySQL 中存储值。我不知道为什么会这样。当我检查 MySQL 时,它显示 empty set

这是我的代码:

import mysql.connector

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

mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE login;")

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

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

    mycursor.execute("USE login;")
    mycursor.execute("CREATE TABLE id (email VARCHAR(20), passw VARCHAR(20));")

# ----------------------- This is the line ---------------------------#

    mycursor.execute(
        f"INSERT INTO id(email, passw) VALUES({email},{passw});")

# -----------------------                 ---------------------------#

else:
    print("wrong password!")

如有任何帮助,我们将不胜感激!

你在这里做一些危险的事情:

无字符串格式(SQL注入)

由于 SQL 注入,您不应该使用字符串格式。当你有更大的 SQL 代码时,它也会更复杂。使用准备好的语句,如:

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

不要总是创建DB/Table新的

你的代码注定每次都会失败,因为如果它已经存在,它就无法创建一个具有相同名称的新数据库。与 table 相同。我建议创建一个安装脚本。您也可以将数据库放在连接器中,而不必使用 mycursor.execute("USE login;")

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

提交

mysql 连接器默认不自动提交请参阅:https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html

所以你必须在执行后自己做。

mydb.commit()

代码最终应该是这样的:

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