这是一个脚本,用于通过文件散列分析文件的信誉。从Azure SQL数据库中获取文件哈希,并通过调用API进行分析,然后将结果再次输入到数据库中。我正在使用SQL Server的ODBC驱动程序17。
在将数据重新输入到数据库时出现错误。
# Scanning files
def fileScan():
select_sql = "SELECT source_hash FROM [Downloads]"
crsr.execute(select_sql)
rows = crsr.fetchall()
# Read all rows
for row in rows:
print(''.join(row))
response = vt.get_file_report(''.join(row))
time.sleep(15)
source_hash = row
md5 = json.dumps(response['results']['md5'])
sha1 = json.dumps(response['results']['sha1'])
sha256 = json.dumps(response['results']['sha256'])
detections = json.dumps(response['results']['positives'])
query = (
"UPDATE Downloads SET md5=(?), sha1=(?), sha256=(?), detections=(?)"
"WHERE source_hash=(?)")
crsr.execute(query, (md5,sha1,sha256,detections,source_hash))
crsr.commit()
下面是错误。
461a26ad4219ea5e504fcdd1a61beb80b1a7fba8ff760e6696aa8cc3a3937887是从数据库检索的要分析的哈希值。
数据库中source_hash的数据类型为VARCHAR1024。
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
Column, parameter, or variable #5: Cannot find data type 461a26ad4219ea5e504fcdd1a61beb80b1a7fba8ff760e6696aa8cc3a3937887. (2715)
(SQLExecDirectW); [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180);
[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Parameter or variable '@P5' has an invalid data type. (2724)")
尽管在许多来源中都发布了类似的错误,但没有提到确切的解决方案。
发布于 2021-09-03 09:20:11
根据所示的错误,
Parameter or variable '@P5' has an invalid data type. (2724)")
SQL查询中的source_hash (靠近WHERE子句)需要一些值(字符串或整型),但是source_hash变量没有给出确切的数据类型,并且在代码中使用了''.join(raw)
和source_hash = raw
。这意味着,如果您的代码成功地为该部分编译,则原始变量可以是列表或元组。
例如,
..... WHERE source_hash = "452dferasd5481asd5"
这是SQL query所期望的,但source_hash变量可以是列表或元组,
['452dferasd5481asd5','',...] or ('452dferasd5481asd5', '',...)
因此,尝试打印source_hash变量以检查其数据类型。如果它出现在给定的示例中,您可以使用source_hash[0]
来获取它。
https://stackoverflow.com/questions/69036362
复制相似问题