【问题标题】:python tuple returns datetime.datetimepython 元组返回 datetime.datetime
【发布时间】:2015-02-25 16:57:32
【问题描述】:

问题:

每当我得到以下查询的结果时:

"SELECT email, url, `timestamp` FROM `transaction` WHERE `email` != '' AND `timestamp` >= \'" + dateonlystring + "\' AND `timestamp` < DATE(DATE_ADD(\'" + dateonlystring + "\', INTERVAL 1 DAY))"

这出现了:

('sampleemail@yahoo.com', 'http://sample.url.com', datetime.datetime(2015, 2, 25, 10, 11, 19))

为什么是 datetime.datetime(2015, 2, 25, 10, 11, 19))?

我怎样才能把它变成这样:

sampleemail@yahoo.com~http://sample.url.com~2015-02-2510:11:19

我的代码/我尝试了什么:

#Date
#datestamp = datetime.strptime('2015-02-25 00:00:00', "%Y-%m-%d %H:%M:%S")
datestamp = datetime.now()
dateonlystring = str(datestamp.date().strftime("%Y-%m-%d %H:%M:%S"))
datetimestring = str(datestamp.now().strftime("%Y%m%d%H%M%S"))

#Dunchangeme:
#Query:
q_getstuff = "SELECT email, url, `timestamp` FROM `transaction` WHERE `email` != '' AND `timestamp` >= \'" + dateonlystring + "\' AND `timestamp` < DATE(DATE_ADD(\'" + dateonlystring + "\', INTERVAL 1 DAY))"

try:
    con = mdb.connect(hostname, username, password, database)
    cur = con.cursor()
    cur.execute(q_getstuff)
    result = cur.fetchall()

    for row in result:
        tuplecrap = str(row).replace('(', '').replace(')', '').replace('\'', '').replace(', ', '~')
        print tuplecrap

值得注意的是,如果用户打算去一个特定的日期(而不是现在),第一个评论的 datestamp 就在那里。

最简单的方法是简单地去掉括号和逗号,就像我在上面所做的那样,但是如果不使用复杂的正则表达式解决方案,这并不能解决问题,而且我很确定这不是正确的方法。

有什么建议吗?

【问题讨论】:

  • 将元组转换为字符串并对其进行操作绝对不是“最简单的方法”。您似乎知道strftime 功能,为什么不使用它?
  • 什么是mdb?为什么使用字符串格式而不是参数化查询?通常,您应该只传递datetime(最好是 -- timezone-aware 日期时间对象),驱动程序应该序列化为 sql 引擎可以理解的格式。

标签: python datetime


【解决方案1】:

每个结果行中有 3 个项目的元组,只需解压即可:

for row in result:
    email, url, date = row
    # here you can format date as you want

【讨论】:

  • 哇。我不知道你能做到这一点。
猜你喜欢
  • 2023-02-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多