python關於pymysql 執行sql語句in的用法

万笑佛發表於2024-09-20

今天在執行python程式碼中發現一個有意思的事,直接看程式碼注意如下紅色部分

name = '張三'
ids =  1, 2, 3
sql = " select NAME,  NUM,   SEX  from TEMP_T WHERE NAME = %s  and id in (%s)"
param = (name,ids)
cursor.execute(sql,param)

發現實際執行的sql語句是:

select NAME, NUM, SEX from TEMP_T WHERE NAME ='張三' and id in (1)

語句並沒有按照預期的結果執行,分析發現引數param = (name,ids)多個引數就是用逗號隔開的,估計就是這裡的錯誤,本想著把後面的引數變成一個整體應該就可以解決。嘗試了元組、列表都失敗,

網上還給出param = (name,(ids,))這樣寫就可以解決,可能是我開發環境不同這麼寫依然不行。

最後用了拼接字串的方法絲滑解決,往往簡單的辦法最有效,直接看完整程式碼。

#coding=utf-8
import random
import pymysql


# 連線資料庫
connection = pymysql.connect(host='192.168.0.100', user='test', password='pwd', database='testdb',port=3306)
# 運算元據庫  建立一個遊標
cursor = connection.cursor()
try:
    #隨機生成50個以 1-1000之間的整數
    ids = [random.randint(1, 1000) for _ in range(50)]
    # 將id列表轉換為適用於SQL查詢的字串格式
    ids_str = ','.join(map(str, ids))
    # 隨機獲取100個賬號
    # 定義SQL查詢語句,使用%s作為引數佔位符
    sql = " select NAME,  NUM,   SEX  from TEMP_T WHERE NAME = %s  and id in (" +ids_str +")"
    name = '張三'
    param = (name)
    # 執行SQL查詢(假設你已經建立了資料庫連線和遊標)
    cursor.execute(sql,param)
    mame = ''
    num = ''
    sex = ''
    # 獲取查詢結果
    rows = cursor.fetchall()
    for row in rows:
        mame = row[0]
        num = row[1]
        sex = row[2]

except pymysql.Error as e:
    print(f'錯誤:,{e}')

cursor.close()  # 關閉遊標
connection.close()

相關文章