Я пытаюсь выполнить простой запрос 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, и у пользователя есть все необходимые разрешения (если бы у него не было - он не смог бы выполнить тот же код из студии управления - это логично для меня).
print
.fetchone
работает послеINSERT
? - person FamousJameous   schedule 12.12.2017row = cur.fetchone())
, следующий сразу после строкиresult = cur.execute(SQL)
, не работает и вызывает ту же ошибку, что иprint(result.fetchone())
. - person Степан Сычёв   schedule 12.12.2017