从python调用mssql(azure)中的insert语句会导致错误,no count on不起作用

tjjdgumg  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(320)

我是个新手,所以请容忍我。我正在尝试做一个非常简单的从python到mssql数据库的插入。我尝试了纯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,将代码放入存储过程并调用该过程和各种其他组合。似乎什么都没用。
我将非常感谢任何帮助。谢谢您。

dwbf0jvd

dwbf0jvd1#

你为什么用set nocount on?
拆下它,它就可以插入了。
使用row=cursor.fetchone()您希望得到什么?
您没有编写一个select查询,您希望得到哪些结果?

相关问题