Соответствующие даты, обе строки, не совпадают? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь использовать оператор IF для запуска smtp для отправки электронных писем, и по какой-либо причине мои совпадающие строки не интерпретируются как совпадение.

Вот с чем я работаю: Я импортирую все, что мне нужно, и задаю «вчера» в виде строки.

import csv, sqlite3
from datetime import date, timedelta

today = date.today()
yesterday = today - timedelta(days = 1)
yesterday = str(yesterday)

Я создал скребок, чтобы захватывать задания с разных сайтов и переносить их в CSV-файл. Затем я перебираю свой CSV-файл и собираю все строки, которые соответствуют моим критериям «навыков»:

skills = ('ninja')
csv_data = csv.DictReader(open('jobs.csv'))

for row in csv_data:
    if skills in row.get('address', '').lower():
        print("match")
        print(row['day'])
        print(type(row['day']))
        print(yesterday)
        print(type(yesterday))
        cur.execute("INSERT INTO jobs_table(day, 
                                            link,  
                                            description,  
                                            compensation,  
                                            employment_type, 
                                            images,  
                                            address) 
                                           VALUES(:day, 
                                                  :link,  
                                                  :description,   
                                                  :compensation,   
                                                  :employment_type,   
                                                  :images,   
                                                  :address)", row,) 
db.commit()

Все это прекрасно работает и загружает задания в мою базу данных. Вывод для «печати» дает мне:

match
2019-06-14
<class 'str'>
2019-06-25
<class 'str'>
match
2019-06-25
<class 'str'>
2019-06-25
<class 'str'>
match
2019-06-25
<class 'str'>
2019-06-25
<class 'str'>

После этого запускается:

cur.execute(f"SELECT description, link 
              FROM jobs_table WHERE day = {yesterday}")

results = cur.fetchall()
if results:
    for result in results:
        result = str(result)
        result = result.replace("'",'')
        result = result.replace('(','')
        result = result.replace(')','')
        send_email(result)
else:
    print('No Results In The Database')
print('')        
print('')

db.close()

И это распечатывает:

No Results In The Database

Что я не понимаю, потому что, как упоминалось выше, и «день» моей базы данных, и «вчерашний день» даты и времени совпадают.

Кто-нибудь знает, что здесь может происходить?

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

Вместо того, чтобы использовать f-строку для вставки даты, я бы сделал это следующим образом:

cur.execute(
    "SELECT description, link FROM jobs_table WHERE day = :day",
    {
        "day": yesterday
    }
)

Параметризация обеспечит правильную кавычку в SQL, а также избавит вас от множества других потенциальных ошибок и ошибок качества данных.

Некоторые примеры использования параметров в командах выполнения можно найти здесь: https://docs.python.org/3/library/sqlite3.html#cursor-objects

1 голос
/ 26 июня 2019

Я сделал свое собственное тестовое приложение, где я подключаюсь к базе данных.следующий код печатает true и пишет в соответствии с вашим.

cur.execute("SELECT description, link FROM jobs_table WHERE day=" + yesterday)
results = cur.fetchall()
if results:
    print("true")
else:
    print("false")

Используйте «strftime» для вашего (вчера) значения и измените (день) в вашей базе данных на varchar.

yesterday = date.today() - timedelta(days=1)
yesterday.strftime('%Y%m%d')

'20190625'

0 голосов
/ 26 июня 2019

вы можете попробовать

cur.execute("SELECT description, link 
                      FROM jobs_table WHERE DATE(day) = DATE({yesterday})")

вместо

cur.execute(f"SELECT description, link 
                      FROM jobs_table WHERE day = {yesterday}")

время может отличаться в столбце Тип даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...