python脚本if参数从未遇到
我有下面的python脚本,它每次运行时都在更新数据库,即使256sha是相同的python脚本if参数从未遇到,python,Python,我有下面的python脚本,它每次运行时都在更新数据库,即使256sha是相同的 import os import hashlib import pynuodb connection = pynuodb.connect("CORE", "priappvmndb01", "ndbadmin", "B1xwmi28", options={'schema': 'markit'}) cursor = connection.cursor() filename = 'BOND_COMPOSITES_201
import os
import hashlib
import pynuodb
connection = pynuodb.connect("CORE", "priappvmndb01", "ndbadmin", "B1xwmi28", options={'schema': 'markit'})
cursor = connection.cursor()
filename = 'BOND_COMPOSITES_20140624.7z'
thedata = pynuodb.Binary(open(filename, 'rb').read())
with open(filename,"rb") as f:
for line in f.readlines():
line = line.rstrip("\n")
m = hashlib.sha256(line)
sha256 = (m.hexdigest())
sqlget = "select md5hash from raw_data where filename = ?"
sqlins = "insert into raw_data (genericfilename, fileid, fileformat, loaddate, revisionnumber, rawdata, md5hash, filename) values ('bond_composites.csv', 1, 'csv', 'now', 1, ?, ?, ?)"
cursor.execute(sqlget, (filename,))
result = cursor.fetchone()
if sha256 == result:
print "Nothing to be done."
else:
cursor.execute(sqlins, (thedata, sha256, filename))
connection.commit()
print "Database Updated!"
从中我发现问题在于if,这意味着它可能无法识别其中一个变量?python DB-API返回行的元组,即使它只包含一个值
'foo' != ('foo',)
所以你可能想做的是:
if sha256 == result[0]:
如果将打印类型(sha256)和打印结果(result)放在if上方,您会看到什么?啊哈。结果似乎是非同寻常的。sha256显示为str.correction,这是因为我截断了DB。结果显示为一个元组。我试图回答这个问题,但a)有人打败了我,b)我犯了和你一样的错误。虽然我应该更清楚,但我认为将m.hexdigest()包装在()中会使其成为一个元组,看起来您也在考虑同样的事情,并有意这么做。虽然我更喜欢下面Tyler的答案,但您可以使用sha256=m.hexdigest()(带尾随,)将其生成一个元组。@B谢谢您的帮助,很高兴知道。很好,这就完成了!谢谢