连接到 SQL 服务器时,Python pymssql 错误“TypeError:'NoneType' 类型的参数不可迭代”

Posted

技术标签:

【中文标题】连接到 SQL 服务器时,Python pymssql 错误“TypeError:\'NoneType\' 类型的参数不可迭代”【英文标题】:Python pymssql error "TypeError: argument of type 'NoneType' is not iterable" when connecting to SQL server连接到 SQL 服务器时,Python pymssql 错误“TypeError:'NoneType' 类型的参数不可迭代” 【发布时间】:2016-06-29 10:41:23 【问题描述】:

我在尝试连接到 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")

这会导致错误:

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

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

如果有帮助,我将导入以下库:

import os
from os import getenv
import pymssql
import subprocess

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

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

这段代码包含在一个名为“connect_to_sql():”的函数中,之后会用到,但是下面的一些代码是敏感的,所以我只删掉了这些特定的行。我希望它已经足够了。

【问题讨论】:

你使用的是 pymssql 2.x 版吗? 是的,我使用的版本是pymssql-2.1.3。更新问题。 您是否尝试在调用 pymssql.connect() 之前打印出凭据?也许你正在传递一些意想不到的东西 我曾假设 getenv(###) 正在工作,但你知道他们对假设的看法。我实际上是在传递“无”作为凭据。删除 'getenv()' 解决了这个问题。感谢您的建议,这让我免去了一个下午的头痛。 很高兴我能帮上忙 =) 【参考方案1】:

当代码执行到

conn = pymssql.connect(server, user, password, database)

抛出此错误是因为 server 的值为 'None'

您已经为此设置了值

server = getenv("####")

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

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

server = getenv("####")
print(server)
user = getenv("####")
print(user)

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

【讨论】:

以上是关于连接到 SQL 服务器时,Python pymssql 错误“TypeError:'NoneType' 类型的参数不可迭代”的主要内容,如果未能解决你的问题,请参考以下文章

使用 pyodbc 将 docker python 连接到 SQL 服务器

无法使用 pymssql 烧瓶连接到 ms sql 服务器

如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器

尝试使用启用了 TLS 的连接的 python 连接到 Sybase 和 Azure SQL 服务器

不使用 ODBC 将 Python 连接到 SQL Server

无法从Virtualbox连接到SQL Server