python - 不是所有的参数都用在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))
解决方案
正如我在评论中所说, 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
事实上,你引用的帖子说的完全一样,所以我不知道你从哪里得到不应该这样做的想法。
推荐阅读
- javascript - 切换对象javascript的值
- sql-server - 无法将 SQL Server 连接到 Crystal Report 8.5
- python - Python 3.7 input() 不起作用,但 raw_input 起作用
- javascript - 如何使用条件循环函数
- python - 二维数组中给定位置的最小项目
- swift - 从委托的源 ViewController 调用异步闭包
- python - 正则表达式在单个匹配中查找和打印多重匹配
- django - 带有 axios 的 Django REST 中的 IntegrityError,(1048,“列 'category_owner_id' 不能为空”)
- sql - 如果 SQL Server 中的另一列相同,则获取具有最小列值的行
- containers - Docker mount 不工作......我在这里错过了什么?