连接到 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 服务器
如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器
尝试使用启用了 TLS 的连接的 python 连接到 Sybase 和 Azure SQL 服务器