SQLAlchemy का DateTime
प्रकार डेटाबेस को गैर-बेवकूफ डेटाटाइम ऑब्जेक्ट को सहेजने के लिए timezone=True
तर्क के लिए अनुमति देता है, और इसे वापस करने के लिए अनुमति देता है। क्या tzinfo
के टाइमज़ोन को संशोधित करने का कोई तरीका है जो एसक्यूएलकेमी पास हो जाता है, उदाहरण के लिए, यूटीसी हो सकता है? मुझे एहसास है कि मैं सिर्फ default=datetime.datetime.utcnow
का उपयोग कर सकता हूं; हालांकि, यह एक बेवकूफ समय है जो किसी को बेवकूफ लोकलटाइम-आधारित डेटाटाइम में गुजरने वाले किसी व्यक्ति को खुशी से स्वीकार करेगा, भले ही मैंने timezone=True
का उपयोग किया हो, क्योंकि यह स्थानीय या यूटीसी समय को गैर-निष्पक्ष बनाता है बिना बेस टाइमज़ोन को सामान्यीकृत करने के लिए। मैंने डेटाटाइम ऑब्जेक्ट को गैर-बेवकूफ बनाने के लिए (pytz का उपयोग करके) कोशिश की है, लेकिन जब मैं इसे डीबी में सहेजता हूं तो यह बेवकूफ के रूप में वापस आता है।SQLAlchemy DateTime timezone
नोट कैसे datetime.datetime.utcnow timezone=True
साथ इतनी अच्छी तरह से काम नहीं करता है:
import sqlalchemy as sa
from sqlalchemy.sql import select
import datetime
metadata = sa.MetaData('postgres://user:[email protected]/db')
data_table = sa.Table('data', metadata,
sa.Column('id', sa.types.Integer, primary_key=True),
sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.utcnow)
)
metadata.create_all()
engine = metadata.bind
conn = engine.connect()
result = conn.execute(data_table.insert().values(id=1))
s = select([data_table])
result = conn.execute(s)
row = result.fetchone()
(1, datetime.datetime (2009, 1, 6, 0, 9, 36, 891,887))
row[1].utcoffset()
datetime.timedelta (-1, 64800) # कि मेरे स्थानीयसमय ऑफसेट है !!
datetime.datetime.now(tz=pytz.timezone("US/Central"))
datetime.timedelta (-1, 64800)
datetime.datetime.now(tz=pytz.timezone("UTC"))
datetime.timedelta (0) #UTC
यहां तक कि अगर मैं इसे बदल यूटीसी का स्पष्ट रूप से उपयोग करने के लिए:
...
data_table = sa.Table('data', metadata,
sa.Column('id', sa.types.Integer, primary_key=True),
sa.Column('date', sa.types.DateTime(timezone=True), default=datetime.datetime.now(tz=pytz.timezone('UTC')))
)
row[1].utcoffset()
...
datetime.timedelta (-1, 64800) # यह समय क्षेत्र का उपयोग नहीं किया मैं स्पष्ट रूप से
या अगर मैं ड्रॉप जोड़ा timezone=True
:
...
data_table = sa.Table('data', metadata,
sa.Column('id', sa.types.Integer, primary_key=True),
sa.Column('date', sa.types.DateTime(), default=datetime.datetime.now(tz=pytz.timezone('UTC')))
)
row[1].utcoffset() is None
...
यह सच है तो यह और भी # db करने के लिए एक समय क्षेत्र इस समय
संग्रहीत डेटाबेस में datetime_with_timzone में "टाइमज़ोन कॉन्फ़िगरेशन पैरामीटर" टाइमज़ोन जानकारी है? –
@Ciastopiekarz नहीं। 'टाइमज़ोन' कॉन्फ़िगरेशन पैरामीटर क्लाइंट कनेक्शन पैरामीटर है। 'समय क्षेत्र के साथ डेटाटाइम', जिसका मूल्य यूटीसी में संग्रहीत किया जाता है, इसे प्रदर्शित करने या वापस करने से पहले इस 'टाइमज़ोन' पैरामीटर में निर्दिष्ट टाइमज़ोन में परिवर्तित हो जाता है। अपने वर्तमान कनेक्शन के लिए क्या मूल्य है यह देखने के लिए 'SHOW टाइमज़ोन' का उपयोग करें। आपको वास्तव में क्या चाहिए इसकी सोच के बारे में सोचें: क्या आपको कोई ईवेंट होने पर समय को स्टोर करने की आवश्यकता है, या आपको जानकारी संग्रहीत करने की भी आवश्यकता है जिसमें संग्रहीत डेटाटाइम मान वास्तव में उत्पन्न हुआ है? यदि यह उत्तरार्द्ध है, तो आपको इस जानकारी को अलग से स्टोर करने की आवश्यकता है। – compostus
अगर मुझे केवल यह पता चल गया कि यह कब हुआ लेकिन यूटीसी में, शायद यह मौजूदा कनेक्शन है, तो टाइमज़ोन जानकारी के बिना मुझे कभी पता नहीं चलेगा कि उपयोगकर्ता का सही समय कब हुआ था। –