【发布时间】:2019-01-10 17:31:47
【问题描述】:
好的,希望这是我忽略的非常愚蠢的事情......
我在 SQL Server 17 (14.0.2002.14) 上使用 Python 3.7.2 和 Pyodbc 4.0.24
在我的 SQL Server 上,我创建了一个这样的表:
create table test(
test1 varchar(5)
)
但是当我尝试通过使用 pyodbc 执行相同的查询来引发错误(因为表已经存在)时,我没有看到返回任何错误:
def createSQLTable():
try:
sql_conn = pyodbc.connect('Driver={ODBC Driver 17 for SQL Server};'
'Server=[SERVERNAME];'
'Database=[DATABASENAME];'
'Trusted_Connection=yes;')
cursor = sql_conn.cursor()
sql = '''set nocount on;
use [DATABASENAME]
create table test(test1 varchar(5));'''
cursor.execute(sql)
except Exception as e:
print(e)
finally:
sql_conn.commit()
cursor.close()
sql_conn.close()
createSQLTable()
如果我在 SQL Server 上运行相同的 TSQL,我会收到错误消息:
Msg 2714, Level 16, State 6, Line 1 已经有一个对象名为 数据库中的“测试”。
那么如何让 Python/Pyodbc 抛出相同或相似的错误?
【问题讨论】:
-
@Parfait 感谢您的建议,不幸的是这并没有改变任何事情。
-
@Parfait 自动提交不走运。
-
删除多余的
USE行,因为您根据连接字符串直接连接到此数据库。 -
@Parfait 啊哈!认为这是一件愚蠢的事情……那行得通。提交答案,我会将其标记为正确。非常感谢!
-
@Parfait 这确实引发了另一个问题......为什么数据库冗余会导致代码无声地完成而没有错误?我现在可以让代码正常工作,只是想完全理解它为什么工作/不工作。
标签: python sql sql-server python-3.x pyodbc