在 SQL Server 中创建数据库用户时使用 pymssql 出错

Posted

技术标签:

【中文标题】在 SQL Server 中创建数据库用户时使用 pymssql 出错【英文标题】:Error using pymssql when creating database users in SQL Server 【发布时间】:2021-09-17 16:03:53 【问题描述】:

每当我尝试在数据库上创建新用户时,都会收到以下错误。

Traceback (most recent call last):
  File "src\pymssql\_pymssql.pyx", line 460, in pymssql._pymssql.Cursor.execute
  File "src\pymssql\_mssql.pyx", line 1104, in pymssql._mssql.MSSQLConnection.execute_query
  File "src\pymssql\_mssql.pyx", line 1135, in pymssql._mssql.MSSQLConnection.execute_query
  File "src\pymssql\_mssql.pyx", line 1268, in pymssql._mssql.MSSQLConnection.format_and_run_query
  File "src\pymssql\_mssql.pyx", line 1806, in pymssql._mssql.check_cancel_and_raise
  File "src\pymssql\_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 Server\n")

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 "src\pymssql\_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 Server\n")

下面是我目前的代码。

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()

【讨论】:

以上是关于在 SQL Server 中创建数据库用户时使用 pymssql 出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在我添加到项目中的 SQL Server Express 数据库中创建用户?

确定用户在 SQL Server 中创建的对象

在SQL Server中创建用户角色及授权

使用 SELECT ... INTO 在 SQL Server 中创建表

sql server中创建表时各个数据类型时啥意思??

如何在 Visual Studio 2015 中创建 SQL Server 项目?