从Python调用MS SQL(Azure)中的INSERT语句会导致错误,NO COUNT ON不起作用

问题描述 投票:0回答:1

我是新手,请多多包涵。我正在尝试从Python到MS SQL数据库中进行非常简单的插入。我尝试了纯pyodbc导致“ pyodbc.ProgrammingError:没有结果。以前的SQL不是查询。”

import pyodbc
server = 'server'
database = 'db'
username = 'user'
password = 'pswd'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

query = "SET NOCOUNT ON INSERT INTO foo ([x],[y],[z]) VALUES(1,1,1)  "

cursor.execute(query)

row = cursor.fetchone() 
while row: 
    print (row)
    row = cursor.fetchone()

而且我尝试了sqlalchemy,pyodbc和pandas的组合,导致“ sqlalchemy.exc.ResourceClosedError:此结果对象不返回行。它已自动关闭。”

import sqlalchemy
import pyodbc
import urllib
import pandas as pd

server = 'server'
database = 'db'
username = 'user'
password = 'pswd'
driver= '{ODBC Driver 17 for SQL Server}'

params = urllib.parse.quote_plus('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
engine = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

sql = "SET NOCOUNT ON INSERT INTO foo ([x],[y],[z]) VALUES(1,1,1)"
sql_df = pd.read_sql(sql=sql, con = engine)

我尝试过使用SET NOCOUNT ON,将代码放入存储过程中,并调用该过程和所有其他组合。似乎没有任何效果。

非常感谢您的帮助。谢谢。

python sql odbc pyodbc nocount
1个回答
0
投票

为什么使用SET NOCOUNT ON?

删除它,它将插入。

您希望通过row = cursor.fetchone()获得什么?

您没有写一个选择查询给您,希望得到什么结果?

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