SQL IN কোয়েরিতে পাইথন টাপল ব্যবহার করতে হলে প্লেসহোল্ডার (? বা %s) ডাইনামিক্যালি জেনারেট করতে হয় SQL ইনজেকশন প্রতিরোধে।
উদাহরণ (SQLite / ? প্লেসহোল্ডার)
my_tuple = ("Hello", "world", "John")
placeholder = '?'
placeholders = ', '.join(placeholder for _ in my_tuple)
query = 'SELECT name FROM students WHERE id IN (%s)' % placeholders
print(query)
# এক্সিকিউট
cursor.execute(query, my_tuple)
আউটপুট
SELECT name FROM students WHERE id IN (?, ?, ?)
PostgreSQL / %s প্লেসহোল্ডার
import psycopg2
my_tuple = (1, 2, 3)
placeholders = ', '.join(['%s'] * len(my_tuple))
query = f'SELECT * FROM users WHERE id IN ({placeholders})'
cursor.execute(query, my_tuple)
গুরুত্বপূর্ণ নিরাপত্তা নিয়ম
- কখনোই স্ট্রিং ফরম্যাটিং (
f"... IN {tuple}") ব্যবহার করবেন না — SQL ইনজেকশন হয় - সদা প্যারামিটারাইজড কোয়েরি (
cursor.execute(query, params)) ব্যবহার করুন - ড্রাইভার অনুযায়ী প্লেসহোল্ডার: SQLite/
?, PostgreSQL/%s, MySQL/%s