列、参数或变量 #5:找不到数据类型
Column, parameter, or variable #5: Cannot find data type
这是一个脚本,用于通过文件哈希分析文件的信誉。文件哈希取自 Azure SQL 数据库并通过调用 API 进行分析,并将结果再次输入数据库。我正在为 SQL 服务器使用 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是从数据库中取出来分析的hash值。
数据库中source_hash的数据类型为VARCHAR(1024)。
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)")
虽然很多来源都发布了类似的错误,但没有提到确切的解决方案。
根据显示的错误,
Parameter or variable '@P5' has an invalid data type. (2724)")
source_hash in SQL query (Near to WHERE clause) is expecting something (string or int) but your source_hash variable is not giving the exact data type and in the您使用的代码 ''.join(raw)
和 source_hash = raw
。这意味着如果您的代码为该部分编译成功,则原始变量可以是列表或元组。
例如,
..... WHERE source_hash = "452dferasd5481asd5"
这是 SQL 查询所期望的,但是 source_hash 变量可以是列表或元组,
['452dferasd5481asd5','',...] or ('452dferasd5481asd5', '',...)
因此,尝试打印您的 source_hash 变量以检查其数据类型。如果它出现在给定的示例中,您可以使用 source_hash[0]
来获取它。
这是一个脚本,用于通过文件哈希分析文件的信誉。文件哈希取自 Azure SQL 数据库并通过调用 API 进行分析,并将结果再次输入数据库。我正在为 SQL 服务器使用 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是从数据库中取出来分析的hash值。
数据库中source_hash的数据类型为VARCHAR(1024)。
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)")
虽然很多来源都发布了类似的错误,但没有提到确切的解决方案。
根据显示的错误,
Parameter or variable '@P5' has an invalid data type. (2724)")
source_hash in SQL query (Near to WHERE clause) is expecting something (string or int) but your source_hash variable is not giving the exact data type and in the您使用的代码 ''.join(raw)
和 source_hash = raw
。这意味着如果您的代码为该部分编译成功,则原始变量可以是列表或元组。
例如,
..... WHERE source_hash = "452dferasd5481asd5"
这是 SQL 查询所期望的,但是 source_hash 变量可以是列表或元组,
['452dferasd5481asd5','',...] or ('452dferasd5481asd5', '',...)
因此,尝试打印您的 source_hash 变量以检查其数据类型。如果它出现在给定的示例中,您可以使用 source_hash[0]
来获取它。