截断表在 Pyodbc 中不起作用

问题描述 投票:0回答:5
import pyodbc

con=pyodbc.connect('Driver={SQL Server};Server=New;Database=Countrydatabase;Trusted_connection=yes')
cur=con.cursor()
cur.execute("TRUNCATE Countrydatabase..region")   
con.close()

我正在尝试使用 pyodbc 模块截断表。但它一直抛出错误。

回溯(最近一次调用最后一次):文件 “C:/Users/sean/Desktop/script.py”,第 6 行,在 cur.execute("截断国家数据库..区域") pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL 服务器驱动程序][SQL Server]“国家数据库”附近的语法不正确。 (102) (SQLExecDirectW)")

当我使用“SELECT”语句时,相同的代码工作正常。

python sql sql-server python-3.x pyodbc
5个回答
6
投票

我的截断不起作用问题似乎是在我明确调用

con.close()
后,自动提交设置不起作用:

con = pyodbc.connect("conn", autocommit=True)

或者您可以在关闭之前显式执行提交:

con.commit()

参考:https://stackoverflow.com/a/31611279/845584


5
投票

如错误消息所示,您的 SQL 不正确。

应该是:

TRUNCATE TABLE region

(您不需要指定数据库,因为您已经连接到国家/地区数据库。)


2
投票

PeterX 的上述评论是我的解决方案。我在实例化命令时设置了 autocommit=True,并且我的表开始被截断。


0
投票

执行 truncate 语句后必须提交

import pyodbc
con=pyodbc.connect('Driver={SQL Server};Server=New;Database=Countrydatabase;Trusted_connection=yes')
cur=con.cursor()
cur.execute("TRUNCATE Countrydatabase..region")  
con.commit()
con.close()

这样就可以了。


-1
投票

您是否尝试过在其前面加上 dbo.类似于: dbo.tablename

我今天在玩它,遇到了同样的问题,添加 dbo 部分有效:-)

© www.soinside.com 2019 - 2024. All rights reserved.