আপনার ক্লায়েন্ট নয়, আপনার ডিবিতে টাইমস্ট্যাম্পগুলি গণনা করুন
বিচক্ষণতার জন্য, আপনি সম্ভবত সমস্ত datetimes
অ্যাপ্লিকেশন সার্ভারের চেয়ে আপনার ডিবি সার্ভার দ্বারা গণনা করতে চান । অ্যাপ্লিকেশনটিতে টাইমস্ট্যাম্প গণনা করা সমস্যার কারণ হতে পারে কারণ নেটওয়ার্ক ল্যাটেন্সিটি পরিবর্তনশীল, ক্লায়েন্টরা কিছুটা আলাদা ক্লক ড্রিফ্টের অভিজ্ঞতা অর্জন করে এবং বিভিন্ন প্রোগ্রামিং ল্যাঙ্গুয়েজ মাঝে মাঝে সময়কে কিছুটা আলাদাভাবে গণনা করে।
এসকিউএলএলচেমি আপনাকে পাস করার মাধ্যমে এটি করতে অনুমতি দেয় func.now()
বা func.current_timestamp()
(তারা একে অপরের উপাধি) যা ডিবিকে টাইমস্ট্যাম্প নিজেই গণনা করতে বলে।
এসকিউএএলএলচেমির ব্যবহার করুন server_default
অতিরিক্তভাবে, একটি ডিফল্ট যেখানে আপনি ইতিমধ্যে DB কে মান গণনা করতে বলছেন, সাধারণত server_default
পরিবর্তে এটি ব্যবহার করা ভাল default
। এটি এসকিউএলএলকেমিকে CREATE TABLE
বিবৃতিটির অংশ হিসাবে ডিফল্ট মানটি পাস করতে বলে ।
উদাহরণস্বরূপ, আপনি যদি এই টেবিলের বিপরীতে কোনও অ্যাডহক স্ক্রিপ্ট লিখেন, এর server_default
অর্থ ব্যবহার করে আপনাকে আপনার স্ক্রিপ্টে ম্যানুয়ালি টাইমস্ট্যাম্প কল যুক্ত করার বিষয়ে চিন্তা করার দরকার নেই - ডাটাবেসটি এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যাবে।
এসকিউএএলএলএকচির onupdate
/server_onupdate
এসকিউএএলএলচেমি সমর্থন করে onupdate
যাতে সারিটি আপডেট করা হয় যে কোনও সময় এটি একটি নতুন টাইমস্ট্যাম্প inোকায় । আবার, টাইমস্ট্যাম্প নিজেই গণনা করতে ডিবিকে বলা ভাল:
from sqlalchemy.sql import func
time_created = Column(DateTime(timezone=True), server_default=func.now())
time_updated = Column(DateTime(timezone=True), onupdate=func.now())
একটি server_onupdate
প্যারামিটার আছে, তবে এর বিপরীতে server_default
এটি কোনও সার্ভারসাইড সেট করে না। এটি কেবল এসকিউএলচেমিকে বলেছে যে কোনও আপডেট হওয়ার পরে আপনার ডাটাবেসটি কলামটি পরিবর্তন করবে (সম্ভবত আপনি কলামটিতে একটি ট্রিগার তৈরি করেছেন ), সুতরাং এসকিউএএলএলচেমি রিটার্ন মানটি জিজ্ঞাসা করবে যাতে এটি সম্পর্কিত বিষয়টিকে আপডেট করতে পারে।
অন্য একটি সম্ভাব্য গোচা:
আপনি লক্ষ্য করে অবাক হতে পারেন যে আপনি যদি একক লেনদেনের মধ্যে একগুচ্ছ পরিবর্তন করেন তবে তাদের সবার একই টাইমস্ট্যাম্প থাকে। কারণ এসকিউএল স্ট্যান্ডার্ড নির্দিষ্ট করে যে CURRENT_TIMESTAMP
লেনদেন শুরুর উপর ভিত্তি করে মানগুলি দেয়।
পোস্টগ্রি অ এসকিউএল-মানক প্রদান করে statement_timestamp()
এবং clock_timestamp()
যা না একটি লেনদেন মধ্যে পরিবর্তন। দস্তাবেজগুলি এখানে: https://www.postgresql.org/docs/current/static/function-datetime.html#FUNCTIONS-DETETIME-CURRENT
ইউটিসি টাইমস্ট্যাম্প
আপনি যদি ইউটিসি টাইমস্ট্যাম্প ব্যবহার করতে চান func.utcnow()
তবে এসকিউএএলএলচেমি ডকুমেন্টেশনে এর জন্য বাস্তবায়নের একটি স্টাব সরবরাহ করা হবে । আপনার নিজের যথাযথ ড্রাইভার-নির্দিষ্ট ফাংশন সরবরাহ করতে হবে।