Python格式化SQL WHERE claus

2024-10-01 19:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它通过pymysql与存储在本地主机上的SQL数据库通信。我知道有类似的关于格式化SQL部分的帖子,特别是this one,但是有人能提出一个解决方案吗? 总是获取类型错误:无法将元组合并到字节。我想是有WHERE子句的。你知道吗

def likeMovement(pID):
    print("Give a rating for the movement with #id:%s" %pID)
    rate=input("Give from 0-5: ")
    userID=str(1)
    print(rate,type(rate))
    print(pID,type(pID))
    print(userID,type(userID))
    cursor=con.cursor()
    sqlquery='''UDPATE likesartmovement SET likesartmovement.rating=%s WHERE 
    likesartmovement.artisticID=? AND likesartmovement.userID=?''' % (rate,), 
    (pID,userID)
    cursor.execute(sqlquery)

TypeError: not all arguments converted during string formatting

提前谢谢!你知道吗


Tags: 函数数据库sqlratetypewherepidcursor
1条回答
网友
1楼 · 发布于 2024-10-01 19:20:10

问题是您将(pID,userID)存储为sqlquery中存储的元组的一部分,而不是将它们作为参数传递给execute

sqlquery='''UDPATE likesartmovement SET likesartmovement.rating=%s WHERE 
    likesartmovement.artisticID=? AND likesartmovement.userID=?''' % (rate,)
cursor.execute(sqlquery, (pID,userID))

如果你举一个简单的例子,你可能会更清楚地看到为什么这些是不同的:

s = 'abc'
spam(s, 2)

s = 'abc', 2
spam(s)

显然这两个人做的不一样。你知道吗


当我们这样做的时候:

  • 你必须把UPDATE拼对。你知道吗
  • 通常希望对SET子句使用查询参数的原因与对WHERE子句使用查询参数的原因完全相同。你知道吗
  • 不需要在单表操作中包含表名,也不允许在单表更新的SET子句中包含表名。你知道吗

所以:

sqlquery='''UDPATE likesartmovement SET rating=? WHERE 
    artisticID=? AND userID=?'''
cursor.execute(sqlquery, (rating, pID, userID))

相关问题 更多 >

    热门问题