Ошибка при использовании pymssql при создании пользователей базы данных в SQL Server

#python #sql #sql-server #pymssql

Вопрос:

Я получаю ошибку ниже всякий раз, когда пытаюсь создать нового пользователя в базе данных.

 Traceback (most recent call last):
  File "srcpymssql_pymssql.pyx", line 460, in pymssql._pymssql.Cursor.execute
  File "srcpymssql_mssql.pyx", line 1104, in pymssql._mssql.MSSQLConnection.execute_query
  File "srcpymssql_mssql.pyx", line 1135, in pymssql._mssql.MSSQLConnection.execute_query
  File "srcpymssql_mssql.pyx", line 1268, in pymssql._mssql.MSSQLConnection.format_and_run_query
  File "srcpymssql_mssql.pyx", line 1806, in pymssql._mssql.check_cancel_and_raise
  File "srcpymssql_mssql.pyx", line 1852, in pymssql._mssql.raise_MSSQLDatabaseException
pymssql._mssql.MSSQLDatabaseException: (102, b"Incorrect syntax near 'CREATE USER [test_login] FOR LOGIN [test_login] WITH DEFAULT_SCHEMA=[dbo]'.DB-Lib error message 20018, severity 15:nGeneral SQL Server error: Check messages from the SQL Servern")

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test_sqlserver.py", line 60, in <module>
    createUsers(row[0][:-1], target_server, target_database)
  File "test_sqlserver.py", line 44, in createUsers
    cursor.execute('%s', sqlStatement)
  File "srcpymssql_pymssql.pyx", line 475, in pymssql._pymssql.Cursor.execute
pymssql._pymssql.ProgrammingError: (102, b"Incorrect syntax near 'CREATE USER [test_login] FOR LOGIN [test_login] WITH DEFAULT_SCHEMA=[dbo]'.DB-Lib error message 20018, severity 15:nGeneral SQL Server error: Check messages from the SQL Servern")
 

Ниже приведен мой код в настоящее время.

 def createUsers(sqlStatement, server, database):
    conn = pymssql.connect(server=server, database=database)
    cursor = conn.cursor()
    cursor.execute('%s', sqlStatement)


target_server = 'MYServer'
target_database = 'MYDatabase'
sqlStatement = 'CREATE USER [test_login] FOR LOGIN [test_login] WITH DEFAULT_SCHEMA=[dbo]'

createUsers(sqlStatement, target_server, target_database)
 

Я не уверен, почему я получаю эту ошибку, так как я могу выполнить инструкцию SQL непосредственно в базе данных без каких-либо проблем. И я также могу использовать pymssql для запроса информации из базы данных. Но всякий раз, когда я пытаюсь создать нового пользователя в базе данных, я продолжаю получать эту ошибку. Кто-нибудь знаком с этим?

Ответ №1:

Проблема была решена после изменения инструкции cursor.execute на приведенную ниже

 cursor.execute(sqlStatement)
 

Мне также пришлось добавить нижеприведенную фиксацию, иначе изменения не были видны на стороне базы данных.

 conn.commit()