今天在執行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()