গৃহীত উত্তরের মন্তব্যে গুরুত্বপূর্ণ বিষয়টি স্পষ্ট করার উদাহরণ
আমি নিজেই এটির সাথে খেলা না হওয়া পর্যন্ত এটি বুঝতে পারি নি, তাই আমি বুঝতে পেরেছিলাম যে সেখানে আরও অনেকে বিভ্রান্ত হয়েছিল। বলুন আপনি যে ব্যবহারকারীর সাথে কাজ করছেন id == 6
এবং no_of_logins == 30
কখন আপনি কখন শুরু করবেন।
# 1 (bad)
user.no_of_logins += 1
# result: UPDATE user SET no_of_logins = 31 WHERE user.id = 6
# 2 (bad)
user.no_of_logins = user.no_of_logins + 1
# result: UPDATE user SET no_of_logins = 31 WHERE user.id = 6
# 3 (bad)
setattr(user, 'no_of_logins', user.no_of_logins + 1)
# result: UPDATE user SET no_of_logins = 31 WHERE user.id = 6
# 4 (ok)
user.no_of_logins = User.no_of_logins + 1
# result: UPDATE user SET no_of_logins = no_of_logins + 1 WHERE user.id = 6
# 5 (ok)
setattr(user, 'no_of_logins', User.no_of_logins + 1)
# result: UPDATE user SET no_of_logins = no_of_logins + 1 WHERE user.id = 6
বিন্দু
উদাহরণের পরিবর্তে ক্লাসটি উল্লেখ করে আপনি এসকিউএএলএলচেমিকে ইনক্রিমেন্টিং সম্পর্কে স্মার্ট হতে পারেন, এটি পাইথন সাইডের পরিবর্তে ডাটাবেস সাইডে ঘটবে। ডেটাবেসের মধ্যে এটি করা ভাল কারণ এটি ডেটা দুর্নীতিতে কম ঝুঁকিপূর্ণ (যেমন দুটি ক্লায়েন্ট একই সাথে দু'জনের পরিবর্তে কেবলমাত্র একটি ইনক্রিমেন্টের নেট ফলাফল সহ বৃদ্ধি করার চেষ্টা করে)। আমি ধরে নিয়েছি পাইথনে ইনক্রিমেন্টিং করা সম্ভব যদি আপনি তালা সেট করে থাকেন বা বিচ্ছিন্নতা স্তরটি গুছিয়ে দেন, তবে আপনাকে যদি তা না করতে হয় তবে কেন বিরক্ত করবেন?
একটি সতর্কীকরণ
আপনি যদি এসকিউএল জাতীয় কোড তৈরি করে এমন কোডের মাধ্যমে যদি দুবার বৃদ্ধি করতে যাচ্ছেন SET no_of_logins = no_of_logins + 1
তবে আপনাকে কমেন্ট বা কমপক্ষে ইনক্রিমেন্টের মধ্যে ফ্লাশ করতে হবে, অন্যথায় আপনি কেবলমাত্র একটি ইনক্রিমেন্ট পাবেন:
# 6 (bad)
user.no_of_logins = User.no_of_logins + 1
user.no_of_logins = User.no_of_logins + 1
session.commit()
# result: UPDATE user SET no_of_logins = no_of_logins + 1 WHERE user.id = 6
# 7 (ok)
user.no_of_logins = User.no_of_logins + 1
session.flush()
# result: UPDATE user SET no_of_logins = no_of_logins + 1 WHERE user.id = 6
user.no_of_logins = User.no_of_logins + 1
session.commit()
# result: UPDATE user SET no_of_logins = no_of_logins + 1 WHERE user.id = 6