【问题标题】:can a return value of a function be passed in the where clause函数的返回值可以在where子句中传递吗
【发布时间】:2016-08-08 18:50:30
【问题描述】:

我有一个 Python 代码,可以显示特定天数的站点 ID 和气温列表。在下面的代码中,我将日期作为列表传递。但这是繁琐的编码,因为我必须在列表中写下所有日期。有什么方法可以将函数的返回值传递给 where 子句。我想知道如何在下面的查询中传递具有开始日期和结束日期的一系列值。以下是代码sn-p:

import MySQLdb
import os,sys
import datetime
path="C:/Python27/"
conn = MySQLdb.connect (host = "localhost",user = "root", passwd = "CIMIS",db = "cimis")
c = conn.cursor()
message = """select stationId,Date,airTemperature from cimishourly where stationId in (2,7) and Date in ('2016,01,01','2016,01,04') """
c.execute(message,)
result=c.fetchall()
for row in result:
    print(row)
conn.commit()
c.close()

【问题讨论】:

  • 您是否充分利用了execute() 方法?看起来您可以将变量传递给您的查询。
  • 即使我使用执行,日期仍然会在列表中。

标签: python mysql python-2.7 mysql-python


【解决方案1】:

是的,您可以在查询中替换函数的返回值。因为message 只是一个字符串,所以您可以像连接任何其他字符串一样连接它。

message = """select stationId,Date,airTemperature from cimishourly where stationId in (2,7) and Date in (""" + functionToGetDates() + """)"""

括号可以像我选择的那样在函数或原始字符串中格式化。

【讨论】:

  • 我正在尝试的函数如下: import datetime def date_range(start, end): r = (end+datetime.timedelta(days=1)-start).days return [start+datetime .timedelta(days=i) for i in range(r)] start = datetime.date(2016,01,01) end = datetime.date(2016,01,04) dateList = date_range(start, end) print '\ n'.join([str(date) for dateList]) 。我正在传递函数但出现错误
  • 无法连接 str 和 datetime.timedelta 对象
  • 在进行连接时,请执行'start of string' + str(dateTimeObject) + 'end of string'
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多