连接到 SQL Server 时,Python pymssql 错误“TypeError: argument of type 'NoneType' is not iterable”

Edw*_*igh 4 python pymssql

尝试连接到 SQL 服务器时,出现错误“TypeError:‘NoneType’类型的参数不可迭代”。我相信错误是在我连接到 SQL 服务器本身的线路上生成的,因为我的第二个打印语句从未使用过,尽管我可能是错的。

我正在使用 pymysql-2.1.3 和 python 3.5.1

server = getenv("####")
user = getenv("####")
password = getenv("####")
database = getenv("####")

print("hi")
conn = pymssql.connect(server, user, password, database)
print("hi2")
cursor = conn.cursor()

cursor.execute("####"
               "SELECT Name, SourceTable, SourceTableID FROM dbo.Attachment WHERE Name LIKE '%icad%'")


conn.close()
print("Connect to SQL complete")
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

Traceback (most recent call last):
hi
  File "C:/convert.py", line 62, in <module>
    connect_to_sql()
  File "C:convert.py", line 15, in connect_to_sql
    conn = pymssql.connect(server, user, password, database)
  File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
  File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
  File "_mssql.pyx", line 552, in _mssql.MSSQLConnection.__init__ (_mssql.c:5891)
TypeError: argument of type 'NoneType' is not iterable

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会发生这种情况 - connect 函数完全遵循 pymssql 文档。

如果有帮助的话,我正在导入以下库:

import os
from os import getenv
import pymssql
import subprocess
Run Code Online (Sandbox Code Playgroud)

我已经删除了这个问题中的数据库凭据,但是我知道它们可以工作,因为我能够通过管理工作室连接到 SQL 服务器。

有谁知道为什么这段代码不起作用?

该代码包含在名为“connect_to_sql():”的函数中,然后使用,但是以下某些代码很敏感,因此我只删除了这些特定的行。我希望这已经足够了。

Rah*_*hul 5

当代码执行达到

conn = pymssql.connect(server, user, password, database)
Run Code Online (Sandbox Code Playgroud)

抛出此错误是因为服务器的值为“None”

您已经为此设置了值

server = getenv("####")
Run Code Online (Sandbox Code Playgroud)

但很多时候getenv 会失败并且不返回任何内容。这取决于系统/平台(尤其是 Windows 系统)

您可以尝试打印服务器和用户的值

server = getenv("####")
print(server)
user = getenv("####")
print(user)
Run Code Online (Sandbox Code Playgroud)

我的经验是,它们返回 None,因此连接不会通过。由于错误不清楚,我们倾向于假设问题出在连接上。