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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید




نویسنده موضوع: جست و جوی فارسی در sqlite (حل شد)  (دفعات بازدید: 765 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
جست و جوی فارسی در 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
« آخرین ویرایش: 17 تیر 1400، 05:37 ب‌ظ توسط Reza Hosseinzadeh »
جست و جو کنید و چیز های جدید بیابید

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #1 : 16 تیر 1400، 08:52 ق‌ظ »
سلام. با توجه به این ورودی، معنی کوئری ای که نوشتین اینه: انتخاب تمام ستون های جدول names که یا ستون name شون "رضا" باشه یا این که team یا act شون خالی باشه در نتیجه تمام ستون ردیف هایی که team ندارن یا act ندارن یا اسم شون رضا هست نمایش داده میشه.

این کوئری باید همین کار رو انجام بده؟
« آخرین ویرایش: 17 تیر 1400، 09:54 ق‌ظ توسط sd70 »

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #2 : 16 تیر 1400، 11:23 ب‌ظ »
سلام. با توجه به این ورودی، معنی کوئری ای که نوشتین اینه: انتخاب تمام ستون های جدول names که یا ستون name شون "رضا" باشه یا این که team یا act شون خالی باشه در نتیجه تمام ستون هایی که team ندارن یا act ندارن یا اسم شون رضا هست نمایش داده میشه.

این کوئری باید همین کار رو انجام بده؟
آها به نکته خوبی اشاره کردید. به نظر شما چطوری با روشی بهتر جست و جو کنم؟
جست و جو کنید و چیز های جدید بیابید

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #3 : 17 تیر 1400، 09:52 ق‌ظ »
بستگی به این داره که انجام چه کاری مد نظر هست. اگر میخواین به طور مجزا امکان جستجو بر اساس تیم، نام یا نقش وجود داشته باشه و جستجو صرفا بر اساس یکی از این موارد انجام میشه (و نه به طور همزمان دو تا یا هر سه) میتونید در بدنه تابع، کدتون رو اصلاح کنید تا کوئری رو فقط بر اساس پارامتر وارد شده در نظر بگیره.

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #4 : 17 تیر 1400، 02:09 ب‌ظ »
به نظرتون خوبه که یه تابع برای search_by_name، یکی برای search_by_team و ... بذارم؟ یا توی یه تابع باشن خوبه؟
جست و جو کنید و چیز های جدید بیابید

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 95
  • جنسیت : پسر
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #5 : 17 تیر 1400، 05:35 ب‌ظ »
اگه قراره جستجوها صرفا بر اساس یک ستون انجام بشه شاید چنان چه توابع مجزا در نظر بگیرید از نظر استفاده راحت تر باشه و کمتر احتمال اشتباه پیش بیاد.

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

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


آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : جست و جوی فارسی در sqlite
« پاسخ #6 : 17 تیر 1400، 05:37 ب‌ظ »
ممنونم
جست و جو کنید و چیز های جدید بیابید