>我有python脚本,其中包含从MySql DB获取数据,然后解析该数据
以下是我从我的SQL数据库获取数据的方式
connection = MySQLdb.connect(host = "192.168.1.50", user = "root",
password = "root", db = "mydb", port = 32768)
cursor = connection.cursor()
cursor.execute("select * from licenses")
data = cursor.fetchall()
下面是一小块输出
print(data)
((1,
'MS SQl',
'eaf5e1b212e0ad3c4a6172a9e9fd30145dd2d9bf070cc2568fdef384ab63254c',
datetime.date(2017, 2, 23),
Decimal('30000.00'),
'21022018',
2,
'',
1,
None,
datetime.datetime(2018, 2, 21, 9, 51, 22),
datetime.datetime(2018, 2, 21, 11, 26, 17),
None,
'Hudson Bay',
'hudson.bay@ifficeemailid.com',
None,
None,
datetime.date(2018, 2, 24),
'21022018',
datetime.date(2018, 2, 25),
1,
1,
0,
None),
(2,
'Palo Alto',
'eaf5e1b212e0',
datetime.date(2017, 2, 2),
Decimal('50000.00'),
'',
2,
'',
1,
None,
datetime.datetime(2018, 2, 21, 10, 5, 16),
datetime.datetime(2018, 2, 26, 12, 21, 51),
None,
'John Snow',
'john.snow@officeemailid.com',
None,
None,
datetime.date(2018, 2, 22),
'eaf5e1b212e0',
datetime.date(2018, 2, 22),
1,
1,
0,
None))
当我尝试从第 17 行获取数据时,我可以得到
for row in data:
print row[17]
2018-02-24
2018-02-22
但是,当我尝试添加条件时,它不起作用。
for row in data:
if '2018-02-24' in row[17]:
print('found')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-50-a5803fbf5283> in <module>()
1 for row in data:
----> 2 if '2018-02-28' in row[17]:
3 print(yes)
4
TypeError: argument of type 'datetime.date' is not iterable
我的最终目标是从代码中获取日期,例如 = today = datetime.now().strftime("%Y-%m-%d")
在上面的代码"2018-02-24"上,我已经硬编码,在实际场景 I 中并得到"今天"变量并检查该日期是否在"第 17 行"中可用
但是出现错误,有什么方法可以解决这个问题吗?
in
搜索整个列中的日期,而不是单个对象:
today = datetime.date.today()
if today in (row[17] for row in data):
print('found')
如果要比较日期对象,则无需转换为字符串。如果列中有datetime
而不是date
,则需要执行一个额外的转换:
today = datetime.date.today()
if today in (row[17].date() for row in data):
print('found')
显式生成器可以替换为 map(itemgetter(17), data)
或 map(datetime.date, map(itemgetter(17), data))
。后者仅在您有 datetime
时才是必需的,错误表明您没有:
from operator import itemgetter
today = datetime.date.today()
if today in map(itemgetter(17), data):
print('found')
请注意,这些版本都没有显式循环。由于生成器是可迭代的,因此in
将执行与原始for
循环类似的线性搜索,但速度更快。除了速度之外,唯一真正的区别是,一旦找到匹配项,这些示例就会停止查找,但您的循环不会。您可以通过在if
中放置break
语句来获得相同的结果。
试试这个,希望这有帮助。假设row[17]
是日期对象。
import datetime
now = datetime.datetime.now()
tdy = now.strftime("%Y-%m-%d")
for row in data:
if tdy == row[17]:
print('found')