Запрос INSERT не выполняется из списка Python, но отлично выполняется из студии управления MSSQL.

Я пытаюсь выполнить простой запрос INSERT к серверу MSSQL, используя библиотеку pypyodbc в python. Если я попытаюсь выполнить

SELECT Country, City, Street, House, Zipcode, Date FROM postal_test_db.dbo.addresses

из Microsoft SQL Management Studio он выполняется правильно, как если бы я выполнял его из моего кода Python:

import pypyodbc
connection_string ='Driver={SQL Server};Server=PC\TEW_SQLEXPRESS;Uid=py_test_user;Pwd=1q2w3e4r5t!A;'
connection = pypyodbc.connect(connection_string)
SQL = "SELECT Country, City, Street, House, Zipcode, Date FROM postal_test_db.dbo.addresses"
cur = connection.cursor()
result = cur.execute(SQL)
print(result.fetchone())

cur.close()
connection.close()

Но если я попытаюсь выполнить следующий код из Microsoft SQL Management Studio:

INSERT INTO postal_test_db.dbo.addresses (Country, City, Street, House, Zipcode) `VALUES ('Россия', 'Ульяновск', 'Варейкиса', '25', '432035')`

тогда он по-прежнему хорошо работает из студии управления, но код Python, который должен делать то же самое, не выполняется

import pypyodbc
connection_string ='Driver={SQL Server};Server=PC\TEW_SQLEXPRESS;Uid=py_test_user;Pwd=1q2w3e4r5t!A;'
connection = pypyodbc.connect(connection_string)
SQL = "INSERT INTO postal_test_db.dbo.addresses (Country, City, Street, House, Zipcode) VALUES ('Россия', 'Ульяновск', 'Варейкиса', '25', '432035')"
cur = connection.cursor()
result = cur.execute(SQL)
print(result.fetchone())

cur.close()
connection.close()

выдает следующую ошибку:

    pypyodbc.ProgrammingError: ('24000', '[24000] [Microsoft][ODBC SQL Server Driver
]Invalid cursor state')

визуальное представление окна CMD с соответствующим сообщением об ошибке Что я делаю не так? Я регистрируюсь в MSSQL как один и тот же пользователь как в студии управления, так и в листинге Python, и у пользователя есть все необходимые разрешения (если бы у него не было - он не смог бы выполнить тот же код из студии управления - это логично для меня).


person Степан Сычёв    schedule 11.12.2017    source источник
comment
Ошибка происходит в строке print. fetchone работает после INSERT?   -  person FamousJameous    schedule 12.12.2017
comment
Нет, row = cur.fetchone()), следующий сразу после строки result = cur.execute(SQL), не работает и вызывает ту же ошибку, что и print(result.fetchone()).   -  person Степан Сычёв    schedule 12.12.2017


Ответы (1)


1) Вы уверены, что сможете fetchone() после exec? Вы ничего не просили вернуть 2) Вам нужно commit(), если вы хотите, чтобы ваши изменения вступили в силу

person dgan    schedule 11.12.2017