Python 3.x 匹配日期,两个字符串,don';t';匹配';?
我正试图使用IF语句触发smtp来发送电子邮件,无论出于何种原因,我的匹配字符串都不会被解释为匹配 以下是我的工作内容: 我正在导入我需要的所有内容,并将“昨天”设置为字符串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) 我构建了一个刮板,从不同的站点
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
,对吗?另一个受害者是试图将值直接放入语句中,而不是将它们绑定到参数……这就成功了!谢谢你的解决方案!成功了!谢谢你的解决方案!