মাইএসকিউএলে পাইথন ডেটটাইম.ডেটটাইম অবজেক্ট .োকানো হচ্ছে


120

আমার একটি মাইএসকিউএল টেবিলে একটি তারিখ কলাম রয়েছে। আমি datetime.datetime()এই কলামে একটি বস্তু .োকাতে চাই। এক্সিকিউট স্টেটমেন্টে আমার কী ব্যবহার করা উচিত?

আমি চেষ্টা করেছি:

now = datetime.datetime(2009,5,5)

cursor.execute("INSERT INTO table
(name, id, datecolumn) VALUES (%s, %s
, %s)",("name", 4,now))

আমি ত্রুটি পেয়ে যাচ্ছি: এর "TypeError: not all arguments converted during string formatting" পরিবর্তে আমার কী ব্যবহার করা উচিত %s?


আপনি কাছাকাছি উদ্ধৃতিগুলি মিস করেছেন%s cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s , '%s')",("name", 4,now))
শেশনাথ

উত্তর:


198

একটি সময়ের ক্ষেত্রে, ব্যবহার করুন:

import time    
time.strftime('%Y-%m-%d %H:%M:%S')

আমি মনে করি স্ট্রফটাইম ডেটটাইমের ক্ষেত্রেও প্রযোজ্য।


4
এছাড়াও, আপনার কলামের নামটি কোনও সংরক্ষিত শব্দ নয় তা নিশ্চিত করুন । "কারেন্ট_ডেট" নামটি বুঝতে পেরে আমাকে 30 মিনিট সময় নিয়েছিল কারণ সমস্যা হয়েছে ... উ!
পাকম্যান

2
কি timeএই উদাহরণে?
জেমস ম্যাকমাহন

1
জে ম্যাকমাহন: সময় একটি পাইথন মডিউল।
ডিস্ট্রোমবার্গ

কেউ যদি একমাত্র বছর, মাস, দিন আনতে চান তবে কী হবে?
পূজা খাতরী

42

আপনি সম্ভবত টাইপ-ইরার পেয়ে যাচ্ছেন কারণ আপনার ডেটকোলোম মানটির চারপাশে উদ্ধৃতি প্রয়োজন।

চেষ্টা করুন:

now = datetime.datetime(2009, 5, 5)

cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, '%s')",
               ("name", 4, now))

বিন্যাসের ক্ষেত্রে, আমার উপরের কমান্ডটি (যার মধ্যে মিলিসেকেন্ড রয়েছে) এবং এর সাথে সাফল্য পেয়েছি:

now.strftime('%Y-%m-%d %H:%M:%S')

আশাকরি এটা সাহায্য করবে.


8
আপনার চারপাশের কোট নাও থাকতে পারে %sমধ্যে pymsql
মার্টিন থোমা

1
আমি যখন এটি চেষ্টা করি তখন তৃতীয়% s এর সাথে উদ্ধৃতিগুলি ত্রুটির সৃষ্টি করে।
realjin

13

now.date()একটি Dateনা হয়ে একটি বস্তু পেতে ব্যবহার করার চেষ্টা করুন DateTime

যদি এটি কাজ না করে, তবে স্ট্রিংয়ে রূপান্তর করা কাজ করা উচিত:

now = datetime.datetime(2009,5,5)
str_now = now.date().isoformat()
cursor.execute('INSERT INTO table (name, id, datecolumn) VALUES (%s,%s,%s)', ('name',4,str_now))

স্ট্রিং প্যারামিটারগুলির আশেপাশে আপনার "কোয়ালিটি ("% s ", '% s', '% s') যুক্ত করার দরকার নেই"
গ্যারেথ সিম্পসন

5

ব্যবহারের পাইথন পদ্ধতি datetime.strftime(format), যেখানে বিন্যাস = '%Y-%m-%d %H:%M:%S'

import datetime

now = datetime.datetime.utcnow()

cursor.execute("INSERT INTO table (name, id, datecolumn) VALUES (%s, %s, %s)",
               ("name", 4, now.strftime('%Y-%m-%d %H:%M:%S')))

সময়ের অঞ্চলগুলোকে

টাইমজোনগুলি যদি উদ্বেগের বিষয় হয় তবে মাইএসকিউএল টাইমজোনটি ইউটিসি-র জন্য নিম্নলিখিত হিসাবে সেট করা যেতে পারে:

cursor.execute("SET time_zone = '+00:00'")

এবং টাইমজোনটি পাইথনে সেট করা যেতে পারে:

now = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)

মাইএসকিউএল ডকুমেন্টেশন

মাইএসকিউএল এই ফর্ম্যাটে DATETIME এবং TIMESTAMP মানগুলি স্বীকৃতি দেয়:

'YYYY-MM-DD HH: MM: SS' বা 'YY-MM-DD HH: MM: SS' এর স্ট্রিং হিসাবে ফর্ম্যাটে । একটি "রিলাক্সড" সিনট্যাক্সও এখানে অনুমোদিত, কোনও বিরামচিহ্ন অক্ষর তারিখের অংশ বা সময়ের অংশগুলির মধ্যে সীমানা হিসাবে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, '2012-12-31 11:30:45', '2012 ^ 12 ^ 31 11 + 30 + 45', '2012/12/31 11 * 30 * 45', এবং '2012 @ 12 @ 31 11 ^ 30 ^ 45 'সমতুল্য।

একটি তারিখ এবং সময় অংশ এবং একটি ভগ্নাংশের সেকেন্ড অংশের মধ্যে স্বীকৃত একমাত্র ডিলিমিটার হ'ল দশমিক পয়েন্ট।

তারিখ এবং সময় অংশগুলি একটি স্থানের পরিবর্তে টি দ্বারা পৃথক করা যায়। উদাহরণস্বরূপ, '2012-12-31 11:30:45' '2012-12-31T11: 30: 45' সমতুল্য।

কোনও 'ওয়াইওয়াইএমএমডিডিএইচএমএমএসএস' বা 'ওয়াইওয়াইএমএমডিডিএইচএমএমএস' ফর্ম্যাটে কোনও সীমানাবিহীন স্ট্রিং হিসাবে, স্ট্রিংটি একটি তারিখ হিসাবে উপলব্ধি করে। উদাহরণস্বরূপ, '20070523091528' এবং '070523091528' '2007-05-23 09:15:28' হিসাবে ব্যাখ্যা করা হয়েছে, তবে '071122129015' অবৈধ (এটির অযৌক্তিক মিনিটের অংশ রয়েছে) এবং '0000-00-00 00: 00:00 '।

YYYYMMDDHHMMSS বা YYMMDDHHMMSS ফর্ম্যাটের যে কোনও একটি সংখ্যা হিসাবে শর্ত রয়েছে যে সংখ্যাটি একটি তারিখ হিসাবে অর্থবোধ করে। উদাহরণস্বরূপ, 19830905132800 এবং 830905132800 '1983-09-05 13:28:00' হিসাবে ব্যাখ্যা করা হয়েছে।


3

আপনি কোন ডাটাবেসে সংযোগ করছেন? আমি জানি ওরাকল তারিখের ফর্ম্যাটগুলি সম্পর্কে পছন্দসই হতে পারে এবং আইএসও 8601 ফর্ম্যাটটি পছন্দ করে।

** দ্রষ্টব্য: ওফস, আমি কেবল পড়েছি আপনি মাইএসকিউএল-এ আছেন। কেবল তারিখটি ফর্ম্যাট করুন এবং পরীক্ষার জন্য এটি একটি পৃথক সরাসরি এসকিউএল কল হিসাবে চেষ্টা করুন।

পাইথনে, আপনি একটি আইএসও তারিখের মতো পেতে পারেন

now.isoformat()

উদাহরণস্বরূপ, ওরাকল তারিখ পছন্দ করে

insert into x values(99, '31-may-09');

আপনার ডাটাবেসের উপর নির্ভর করে যদি এটি ওরাকল হয় তবে আপনার এটির TO_DATE দরকার হতে পারে:

insert into x
values(99, to_date('2009/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));

TO_DATE এর সাধারণ ব্যবহার হ'ল:

TO_DATE(<string>, '<format>')

যদি অন্য একটি ডাটাবেস ব্যবহার করে (আমি কার্সারটি দেখেছি এবং ওরাকল ভেবেছিলাম; আমি ভুল হতে পারি) তবে তাদের তারিখ বিন্যাসের সরঞ্জামগুলি পরীক্ষা করুন। মাইএসকিউএল-এর জন্য এটি DATE_FORMAT () এবং এসকিউএল সার্ভার এটি কনভার্ট।

এছাড়াও এসকিউএএলএলচেমির মতো একটি সরঞ্জাম ব্যবহার করা এগুলির মত পার্থক্যগুলি সরিয়ে দেবে এবং আপনার জীবনকে সহজ করে তুলবে।


আমি ডেটটাইম.আইসোফর্ম্যাট () ব্যবহার করার পরামর্শ দিচ্ছি না কারণ আপনি যদি সময়জোন সচেতন অবজেক্টটি ব্যবহার করেন তবে উত্পন্ন স্ট্রিংয়ে টাইমজোন ডেটা অন্তর্ভুক্ত থাকে এবং প্রয়োজনীয় মাইএসকিএল ফর্ম্যাটের সাথে আর মেলে না।
ফ্র্যাঙ্কস্টার

0

যদি আপনি কেবল একটি অজগর ডেটটাইম.ডেট ব্যবহার করেন (পুরো ডেটটাইম.ডেটটাইম নয়), কেবল স্ট্রিং হিসাবে তারিখটি কাস্ট করুন। এটি খুব সহজ এবং আমার জন্য কাজ করে (মাইএসকিএল, পাইথন ২.7, উবুন্টু)। কলাম published_dateএকটি মাইএসকিউএল তারিখ ক্ষেত্র, পাইথন পরিবর্তনশীল publish_dateহয় datetime.date

# make the record for the passed link info
sql_stmt = "INSERT INTO snippet_links (" + \
    "link_headline, link_url, published_date, author, source, coco_id, link_id)" + \
    "VALUES(%s, %s, %s, %s, %s, %s, %s) ;"

sql_data = ( title, link, str(publish_date), \
             author, posted_by, \
             str(coco_id), str(link_id) )

try:
    dbc.execute(sql_stmt, sql_data )
except Exception, e:
    ...

0

যখন t-sQL এ ইস্টার্ট করা হয়

এটি ব্যর্থ:

select CONVERT(datetime,'2019-09-13 09:04:35.823312',21)

এইটা কাজ করে:

select CONVERT(datetime,'2019-09-13 09:04:35.823',21)

সহজ পথ:

regexp = re.compile(r'\.(\d{6})')
def to_splunk_iso(dt):
    """Converts the datetime object to Splunk isoformat string."""
    # 6-digits string.
    microseconds = regexp.search(dt).group(1)
    return regexp.sub('.%d' % round(float(microseconds) / 1000), dt)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.