我有python脚本,其中包含从MySql DB获取数据然后解析该数据
下面是我从MY SQL db获取数据的方式
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")
获取日期
在上面的代码&#39; 2018-02-24&#39;我已经硬化了,在实际场景中我已经实现了这一目标&#39;今天&#39;变量
并检查第17行&#39;
但是得到错误,有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
您可以使用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
循环执行类似的线性搜索,但速度更快。除了速度之外,唯一真正的区别是,这些示例将在找到匹配后立即停止查看,但您的循环不会。通过在break
中添加if
语句,您可以获得相同的结果。
答案 1 :(得分:-1)
试试这个,希望这会有所帮助。假设row[17]
是日期对象。
import datetime
now = datetime.datetime.now()
tdy = now.strftime("%Y-%m-%d")
for row in data:
if tdy == row[17]:
print('found')