我正在閱讀從mySQL數據庫的各種數據類型。第五列在數據庫中有'DATETIME'類型。我使用它作爲'BloodTraitRecord'對象的entry_date。當時間是00:00:00時,如何停止python將mySQL DATETIME轉換爲datetime.date?
import mysql.connector
from datetime import timedelta
from datetime import datetime
show_DB = """select RUID, test_sname, test_value, units, ref_range, entry_date from %s
where RUID=%%s and test_sname=%%s order by RUID,
test_sname, entry_date Limit 5;""" % (tableToUse,)
cursor.execute(show_DB, (ruid, traitPair[0]))
resultsForOneTrait = cursor.fetchall()
for result in resultsForOneTrait:
ruid = result[0]
s_name = result[1].decode("UTF-8")
value = result[2]
units = result[3].decode("UTF-8")
ref_range = result[4].decode("UTF-8")
# Need assistance here
entryDate = result[5]
record = BloodTraitRecord(ruid, s_name, value, units, ref_range, entryDate)
BloodTraitRecord類:從數據庫
class BloodTraitRecord:
def __init__(self, ruid, test_sname, test_value, units, ref_range, entry_date):
self.RUID = ruid
self.test_sname = test_sname
self.test_value = test_value
self.units = units
self.ref_range = ref_range
self.entry_date = entry_date
DATETIME物體看起來像這樣在MySQL服務器:
'2008-11-14 13:28:00'
預期,除非在數據庫中的時間是午夜的代碼功能,如下所示:
'2014-05-18 00:00:00'
在這種情況下,只有這種情況下,我記錄的entry_date.date()在後面的代碼比較其他datetime.date時出現此錯誤:
# 'cancerCutoff' is consistently a datetime.date
cancerCutoff = firstCancerAnemiaCodeDate[ruidkey] - timedelta(days=180)
if cancerCutoff < record.entry_date.date():
AttributeError: 'datetime.date' object has no attribute 'date'
印刷record.entry_date確認時間屬性沒有了這種情況:
'2014-05-18'
我有辦法通過檢查對象的類型,只調用如果對象是一個日期時間日期屬性來解決這個問題,但我想知道如果有一個比這更好的解決方法。
我也不明白爲什麼python會在DATETIME時間爲00:00:00時立即將MySQL DATETIME轉換爲datetime.date。
感謝您的幫助!
你是說如果Python的值包含午夜,Python會將MySQL DATETIME轉換爲'datetime.date',但否則不會?你使用的是什麼ORM或連接器?看起來像'mysql.connector',但請在問題中確認。 – ChrisP
所有這些都是正確的。更新問題。 – Dylan
我*不能*通過在本地MySQL 5.6.24服務器上運行的mysql.connector版本2.1.3和Python 3.5複製問題。你正在運行什麼版本? – ChrisP