File "D:\pythonProject\venv\client.py", line 45, in add_Line cursor.execute(sql, (time, ip, content)) File "src\pymssql\_pymssql.pyx", line 476, in pymssql._pymssql.Cursor.execute pymssql._pymssql.ProgrammingError: (102, b"Incorrect syntax near '?'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n") 进程已结束,退出代码0
时间: 2024-04-01 20:31:21 浏览: 193
这个错误是由于 SQL 语句中的占位符使用错误导致的。在 pymssql 模块中,占位符应该使用 `%s` 而不是 `?`。你需要将代码中的 `cursor.execute(sql, (time, ip, content))` 改为 `cursor.execute(sql, (time, ip, content,))`。在 `content` 后面加上一个逗号,将其变成一个元组,以便 pymssql 模块正确解析占位符。
相关问题
File "D:\pythonProject\venv\client.py", line 45, in add_Line cursor.execute(sql, (time, ip, content,)) File "src\pymssql\_pymssql.pyx", line 476, in pymssql._pymssql.Cursor.execute pymssql._pymssql.ProgrammingError: (102, b"Incorrect syntax near '?'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")
这个错误可能是由于 SQL 语句中的某些字符没有被正确转义导致的。你可以尝试使用 `pymssql.escape()` 函数来转义特殊字符,例如:
```
sql = "INSERT INTO mytable (time, ip, content) VALUES (%s, %s, %s)"
sql = sql.encode('utf-8')
sql = pymssql.escape(sql).decode('utf-8')
cursor.execute(sql, (time, ip, content))
```
另外,你还需要确保 SQL 语句中的表名、列名等标识符用反引号(`)或方括号([])括起来,例如:
```
sql = "INSERT INTO `mytable` (`time`, `ip`, `content`) VALUES (%s, %s, %s)"
```
或者
```
sql = "INSERT INTO [mytable] ([time], [ip], [content]) VALUES (%s, %s, %s)"
```
这样可以避免 SQL 语句中的关键字和保留字与标识符冲突。
Traceback (most recent call last): File "D:\pythonProject\venv\client.py", line 46, in add_Line sql = pymssql.escape(sql).decode('utf-8') AttributeError: module 'pymssql' has no attribute 'escape'
抱歉,我之前的回答有误。`pymssql` 模块确实没有 `escape` 函数。你可以使用 `pymysql` 模块的 `escape_string` 函数来转义特殊字符,例如:
```
import pymysql
...
sql = "INSERT INTO mytable (time, ip, content) VALUES (%s, %s, %s)"
sql = pymysql.escape_string(sql).decode('utf-8')
cursor.execute(sql, (time, ip, content))
```
另外,同样需要确保 SQL 语句中的表名、列名等标识符用反引号(`)或方括号([])括起来。
阅读全文