我正尝试使用IF语句来触发smtp来发送电子邮件,并且无论出于何种原因,我的匹配字符串都不会被解释为匹配项。
这就是我正在处理的内容: 我正在导入所需的所有内容,并将“昨天”设置为字符串。
describe '#find_part_id' do
before do
allow(STDIN.gets).to receive(:chomp).and_return(stdin_input)
end
let(:stdin_input) { 'user input from stdin' }
let(:face) { create(:face) }
subject { described_class.find_part_id(face) }
context 'When bab con already exists' do
context 'when there are more than one part ids' do
it 'some test' do
# your test here
end
end
# more contexts...
context 'a context that needs a different stdin_input' do
let(:stdin_input) { 'some different user input from stdin' }
it 'another test' do
# your test here
end
end
end
end
我构建了一个刮板,以从各个站点抓取作业并将其拖放到csv文件中。然后,我要遍历我的csv文件并抓取所有符合“技能”条件的行:
import csv, sqlite3
from datetime import date, timedelta
today = date.today()
yesterday = today - timedelta(days = 1)
yesterday = str(yesterday)
所有这些都可以正常工作,并将作业上传到我的数据库。 “打印”的输出给我:
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()
我不理解,因为如上所述,我的数据库的“天”和日期时间的“昨天”都是匹配的字符串。
有人知道这里会发生什么吗?
答案 0 :(得分:2)
我不是使用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 :(得分:1)
我制作了自己的测试应用程序,并在其中连接到数据库。 以下代码显示为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'
答案 2 :(得分:0)
您可以尝试
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}")
日期类型列中的时间可能有所不同。