تقنية

sqlite3.Row في بايثون: هل تكفي القيم لمساواة الصفين؟

صفان بقيمة سبعة واسمين مختلفين غير متساويين
الأسماء مختلفة. [1] [2]

حدّد هل تقارن الصف أم قيمه. [1] [2]

الخلاصة السريعة

لا؛ الأسماء تؤثر في مساواة Row. [1] [2]

  • أنشأنا قاعدة في الذاكرة وعيّنا row_factory. [1] [2]
  • الصفان يحملان 7 باسمين مختلفين. [1] [2]
  • a==b يعطي False. [1] [2]
  • مقارنة tuple للقيم تعطي True. [1] [2]
  • اختبرنا 3.12.14 وأغلقنا الاتصال؛ لا ملفات قاعدة. [1] [2]

المثال

import sqlite3 as s
c=s.connect(":memory:")
try:
 c.row_factory=s.Row
 a=c.execute(
  "select 7 as bud").fetchone()
 b=c.execute(
  "select 7 as leaf").fetchone()
 print(a==b)
 print(tuple(a)==tuple(b))
 print(a.keys(),b.keys())
finally:
 c.close()

[1] [2]

لماذا تختلف النتيجة؟

المصدر يقارن وصف الأعمدة قبل البيانات. هنا يتغير الاسم من bud إلى leaf؛ keys() يعرضهما. المخرجات: False، ثم True، ثم القائمتان ['bud'] و['leaf']. [1] [2]

القيم المحولة إلى tuple متساوية
القيم متساوية. [1] [2]

ضبط المقارنة

استعلامان بالاسم والقيمة نفسيهما أعطيا صفين متساويين. تغيير القيمة مع ثبات الاسم أعطى عدم المساواة. التحويل إلى tuple يقارن القيم بالترتيب. [1] [2]

المراجع

  1. Python 3.12: SQLite Row equality
  2. CPython 3.12.14: Row comparison
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.