【问题标题】:Column, parameter, or variable #5: Cannot find data type列、参数或变量 #5:找不到数据类型
【发布时间】:2021-09-02 19:59:00
【问题描述】:

这是一个脚本,用于通过文件哈希分析文件的信誉。文件哈希取自 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的数据类型为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)")

尽管许多来源都发布了类似的错误,但没有提到确切的解决方案。

【问题讨论】:

  • source_hash Python 变量是行引用。你试过source_hash = row.source_hash吗?

标签: python sql-server azure-sql-database pyodbc


【解决方案1】:

根据显示的错误,

Parameter or variable '@P5' has an invalid data type. (2724)")

SQL 查询(Near to WHERE 子句)中的 source_hash 需要一些东西(字符串或 int),但您的 source_hash 变量没有给出确切的数据类型,并且在您使用的代码中没有给出确切的数据类型 ''.join(raw)source_hash = raw。这意味着如果您的代码为该部分成功编译,原始变量可能是一个列表或元组。

例如,

..... WHERE source_hash = "452dferasd5481asd5"

这是 SQL 查询所期望的,但 source_hash 变量可以是列表或元组,

['452dferasd5481asd5','',...] or ('452dferasd5481asd5', '',...)

所以,试着打印你的 source_hash 变量来检查它的数据类型。如果它出现在给出的示例中,您可以使用source_hash[0] 来获取它。

【讨论】:

    猜你喜欢
    • 2020-04-11
    • 2014-12-22
    • 2021-07-13
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多