Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 匹配日期,两个字符串,don';t';匹配';?_Python 3.x_String_Sqlite_Datetime - Fatal编程技术网

Python 3.x 匹配日期,两个字符串,don';t';匹配';?

Python 3.x 匹配日期,两个字符串,don';t';匹配';?,python-3.x,string,sqlite,datetime,Python 3.x,String,Sqlite,Datetime,我正试图使用IF语句触发smtp来发送电子邮件,无论出于何种原因,我的匹配字符串都不会被解释为匹配 以下是我的工作内容: 我正在导入我需要的所有内容,并将“昨天”设置为字符串 import csv, sqlite3 from datetime import date, timedelta today = date.today() yesterday = today - timedelta(days = 1) yesterday = str(yesterday) 我构建了一个刮板,从不同的站点

我正试图使用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'>
并打印出:

No Results In The Database
我不明白,因为如上所述,我的数据库的“day”和datetime的“Dayed”都是匹配字符串

有人知道这里可能发生了什么吗?

你可以试试

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}")
日期类型列中的时间可能不同。

您可以试试

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}")

时间在日期类型列中可能有所不同。

我已经制作了自己的测试应用程序,在这里我连接到数据库。 下面的代码打印为true,并且正在编写与您的匹配的代码

cur.execute("SELECT description, link FROM jobs_table WHERE day=" + yesterday)
results = cur.fetchall()
if results:
    print("true")
else:
    print("false")
对(昨天)值使用“strftime”,并将数据库中的(day)更改为varchar

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

“20190625”

我制作了自己的测试应用程序,在这里我连接到一个数据库。 下面的代码打印为true,并且正在编写与您的匹配的代码

cur.execute("SELECT description, link FROM jobs_table WHERE day=" + yesterday)
results = cur.fetchall()
if results:
    print("true")
else:
    print("false")
对(昨天)值使用“strftime”,并将数据库中的(day)更改为varchar

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

“20190625”

我不使用f字符串插入日期,而是这样做:

cur.execute(
    "SELECT description, link FROM jobs_table WHERE day = :day",
    {
        "day": yesterday
    }
)
参数化将确保它在SQL中被正确引用,还可以避免其他一些潜在的转义和数据质量问题


这里可以找到一些在execute命令中使用参数的示例:

与其使用f字符串插入日期,不如这样做:

cur.execute(
    "SELECT description, link FROM jobs_table WHERE day = :day",
    {
        "day": yesterday
    }
)
参数化将确保它在SQL中被正确引用,还可以避免其他一些潜在的转义和数据质量问题


这里可以找到一些在execute命令中使用参数的示例:

值得一试,但它没有改变输出。\n值得一试,但它没有改变输出。\
昨天的
看起来像是
2019-06-14
,对吗?另一个受害者是试图将值直接放入语句中,而不是将它们绑定到参数…
昨天
看起来像是
2019-06-14
,对吗?另一个受害者是试图将值直接放入语句中,而不是将它们绑定到参数……这就成功了!谢谢你的解决方案!成功了!谢谢你的解决方案!