Вызов операторов INSERT в MS SQL (Azure) из Python приводит к ошибкам, NO COUNT ON не работает - PullRequest
0 голосов
/ 27 мая 2020

Я новичок ie, так что терпите меня. Я пытаюсь сделать очень простую вставку из Python в базу данных MS SQL. Я пробовал чистый pyodb c, что привело к "pyodb c .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, pyodb c и pandas, что привело к "sqlalchemy.ex c .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, поместив код в хранимую процедуру и вызвав процедуру и всевозможные другие комбинации. Кажется, ничего не работает.

Буду очень признателен за любую помощь. Спасибо.

1 Ответ

0 голосов
/ 01 июня 2020

Почему вы используете SET NOCOUNT ON?

удалите его, и он выполнит вставку.

что вы ожидаете получить с row = cursor.fetchone ()?

Вы не написали запрос на выборку, какие результаты вы ожидаете получить?

...