在 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 数据库中创建用户?