انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: 🇮🇷 در 15 تیر 1400، 09:13 ب‌ظ

عنوان: جست و جوی فارسی در sqlite (حل شد)
ارسال شده توسط: 🇮🇷 در 15 تیر 1400، 09:13 ب‌ظ
سلام. ببخشید برای جست و جو کردن در sqlite3 در پایتون چیکار باید بکنم؟
تابع:def search(table, name='', team='', act=''):
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()
    cursor.execute(f"SELECT * FROM {table} WHERE name=? OR team=? OR act=?", (name, team, act))
    rows = cursor.fetchall()
    conn.commit()
    conn.close()
    return rows
وقتی دستور زیر رو میزنم، همه محتوای موجود در جدول، برگشت داده میشن:
print(search('names', name='رضا'))با ماژول sqlite3 کار میکنم:
import sqlite3
عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: sd70 در 16 تیر 1400، 08:52 ق‌ظ
سلام. با توجه به این ورودی، معنی کوئری ای که نوشتین اینه: انتخاب تمام ستون های جدول names که یا ستون name شون "رضا" باشه یا این که team یا act شون خالی باشه در نتیجه تمام ستون ردیف هایی که team ندارن یا act ندارن یا اسم شون رضا هست نمایش داده میشه.

این کوئری باید همین کار رو انجام بده؟
عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: 🇮🇷 در 16 تیر 1400، 11:23 ب‌ظ
سلام. با توجه به این ورودی، معنی کوئری ای که نوشتین اینه: انتخاب تمام ستون های جدول names که یا ستون name شون "رضا" باشه یا این که team یا act شون خالی باشه در نتیجه تمام ستون هایی که team ندارن یا act ندارن یا اسم شون رضا هست نمایش داده میشه.

این کوئری باید همین کار رو انجام بده؟
آها به نکته خوبی اشاره کردید. به نظر شما چطوری با روشی بهتر جست و جو کنم؟
عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: sd70 در 17 تیر 1400، 09:52 ق‌ظ
بستگی به این داره که انجام چه کاری مد نظر هست. اگر میخواین به طور مجزا امکان جستجو بر اساس تیم، نام یا نقش وجود داشته باشه و جستجو صرفا بر اساس یکی از این موارد انجام میشه (و نه به طور همزمان دو تا یا هر سه) میتونید در بدنه تابع، کدتون رو اصلاح کنید تا کوئری رو فقط بر اساس پارامتر وارد شده در نظر بگیره.
عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: 🇮🇷 در 17 تیر 1400، 02:09 ب‌ظ
به نظرتون خوبه که یه تابع برای search_by_name، یکی برای search_by_team و ... بذارم؟ یا توی یه تابع باشن خوبه؟
عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: sd70 در 17 تیر 1400، 05:35 ب‌ظ
اگه قراره جستجوها صرفا بر اساس یک ستون انجام بشه شاید چنان چه توابع مجزا در نظر بگیرید از نظر استفاده راحت تر باشه و کمتر احتمال اشتباه پیش بیاد.

اگه ستون های خیلی زیادی دارین طبیعتا در این حالت ایجاد تابع زیاد ممکنه دردسرساز بشه و میشه در چنین حالتی اسم ستونی که قراره جستجو بر اساس اون انجام بشه رو هم بعنوان ورودی تابع در نظر گرفت که البته اشکالش اینه که ممکنه اسم ستون اشتباه به تابع وارد بشه و ارور SQL پیش بیاد (که خب میشه اون اکسپشن رو catch کرد و مشکلی از این بابت نیست)

اگر هم جستجو قراره بصورت ترکیبی انجام بشه (مثلا یک بار فقط با ستون A یک بار A و C یک بار A, B, C و ...) که خب طبیعتا در چنین حالتی شاید تنها راه حل این باشه که فقط از یک تابع استفاده بشه چون تعداد حالت های زیادی میتونه داشته باشه.

عنوان: پاسخ : جست و جوی فارسی در sqlite
ارسال شده توسط: 🇮🇷 در 17 تیر 1400، 05:37 ب‌ظ
ممنونم