返回

Pyodbc 创建 SQL Server 2008 表时如何解决“Previous SQL was not a query”错误?

windows

使用 Pyodbc 在 SQL Server 2008 中创建表时解决 "Previous SQL was not a query" 错误

概述

当你使用 Pyodbc 与 SQL Server 2008 交互时,可能会遇到 "Previous SQL was not a query" 错误。这通常是由于以下原因:

  • 错误的查询类型
  • 缺少 COMMIT 操作

本文将深入探讨这些原因,并提供如何解决错误的逐步指南。

错误原因

错误的查询类型

Pyodbc 要求使用 execute() 方法执行查询,而不是使用 cursor.execute() 方法。使用错误的方法会导致此错误。

缺少 COMMIT

在创建表后,必须提交事务以使更改生效。如果没有提交事务,则更改将不会持久化到数据库中,并且可能会出现此错误。

解决方法

修改后的代码

import pyodbc

def SQL(QUERY, target = '...', DB = '...'):
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + target + DB+';UID=user;PWD=pass')
    cursor = cnxn.cursor()
    cursor.execute(QUERY)
    cnxn.commit()  # 添加 COMMIT 语句

    cpn = []

    for row in cursor:
        cpn.append(row)
    return cpn

print SQL("CREATE TABLE dbo.Approvals (ID SMALLINT NOT NULL IDENTITY PRIMARY KEY, HostName char(120));")

其他提示

  • 确保你具有在目标数据库上创建表的权限。
  • 检查你的连接字符串是否正确,并且你能够连接到数据库。
  • 尝试使用更简单的查询来排除任何其他潜在问题。例如,你可以尝试使用 SELECT 查询来检索数据。

常见问题解答

  1. 为什么使用 Pyodbc 而不用其他库?

    Pyodbc 是一个流行且强大的 Python 库,它提供了一个与 Microsoft SQL Server 交互的简单而高效的界面。

  2. 创建表时需要考虑哪些因素?

    创建表时,你需要考虑列的数据类型、表中的列数、主键以及表的索引。

  3. 如何在创建表后插入数据?

    可以使用 INSERT 查询来向表中插入数据。例如:

    INSERT INTO dbo.Approvals (HostName) VALUES ('example.com')
    
  4. 如果我在创建表时遇到其他错误怎么办?

    检查 SQL Server 日志文件以查找任何错误消息。你还可以尝试使用 tryexcept 块来捕获任何异常。

  5. 如何提高 Pyodbc 代码的性能?

    你可以通过使用参数化查询、批处理操作和连接池来提高 Pyodbc 代码的性能。

结论

通过遵循本文中概述的步骤,你应该能够解决使用 Pyodbc 在 SQL Server 2008 中创建表时遇到的 "Previous SQL was not a query" 错误。记住,仔细检查你的查询类型和提交事务对于确保你的代码正确运行至关重要。