我的程序无法使用 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!")
我正在使用 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!")