簡體   English   中英

Python格式化SQL WHERE子句

[英]Python Formatting SQL WHERE clause

我有此功能,可以通過pymysql與存儲到本地主機的SQL數據庫進行通信。 我知道也有關於格式化SQL節的類似文章,尤其是這一節,但是有人可以提出解決方案嗎? 始終出現TypeError:無法將元組連接到字節。 我想這與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:在字符串格式化期間並非所有參數都已轉換

提前致謝!

問題是您將(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
  • 通常,出於與WHERE子句相同的原因,通常希望對SET子句使用查詢參數。
  • 您無需在單表操作中包含表名,也不允許在單表更新中的SET子句中包含表名。

所以:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM