首页 > 解决方案 > 不是所有的参数都用在sql语句中,sql语句中的变量

问题描述

我正在尝试为我的学校项目使用 SQL 做一些事情。要在 SQL 语句中使用变量,我关注了这篇文章:如何在 Python 中的 SQL 语句中使用变量?. 但我在此函数中收到以下错误:

出了点问题:SQL 语句中没有使用所有参数

def Einkauf():
Typ = int(input("Typ"))
Anzahl = input("Anzahl")
MHD = input("MHD (YYYYMMDD)")
try:
    cursor.execute("insert into Warenlager(Anzahl, MHD, StatusID, TypId) values(?,?,1,?)", (Anzahl,MHD,Typ))
    db.commit()
except mysql.connector.Error as err:
    print("Something went wrong: {}".format(err))

标签: pythonsql

解决方案


正如我在评论中所说, mysql.connector%s用作占位符。

cursor.execute("insert into Warenlager(Anzahl, MHD, StatusID, TypId) values(%s, %s, 1, %s)", (Anzahl,MHD,Typ))

请注意,这并不是不安全的,因为您没有将其用于字符串插值。这是不安全的:

cursor.execute("insert into Warenlager(Anzahl, MHD, StatusID, TypId) values(%s, %s, 1, %s)" % (Anzahl,MHD,Typ))  # don't do this

事实上,你引用的帖子说的完全一样,所以我不知道你从哪里得到不应该这样做的想法。


推荐阅读