Ошибка Python pymssql TypeError: аргумент типа «NoneType» не повторяется при подключении к SQL-серверу

Я получаю сообщение об ошибке "TypeError: аргумент типа "NoneType" не является итерируемым" при попытке подключения к серверу SQL. Я считаю, что ошибка генерируется в строке, где я подключаюсь к самому серверу 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():» и затем используется впоследствии, однако часть следующего кода является конфиденциальной, поэтому я вырезал только эти конкретные строки. Я надеюсь, что этого достаточно.


person Edward Haigh    schedule 29.06.2016    source источник
comment
Вы используете версию 2.x pymssql?   -  person Pedru    schedule 29.06.2016
comment
Да, я использую версию pymssql-2.1.3. Обновление вопроса.   -  person Edward Haigh    schedule 29.06.2016
comment
Вы пытались распечатать учетные данные перед вызовом pymssql.connect()? Может быть, вы передаете что-то неожиданное   -  person Pedru    schedule 29.06.2016
comment
Я предполагал, что getenv(###) работает, но вы знаете, что они говорят о предположении. На самом деле я передавал «Нет» в качестве учетных данных. Удаление getenv() решило проблему. Спасибо за предложение, это спасло меня от головной боли после обеда.   -  person Edward Haigh    schedule 29.06.2016
comment
Рад, что смог помочь =)   -  person Pedru    schedule 29.06.2016
comment
Фактически, если вы посмотрите на трассировку стека, она говорит File "_mssql.pyx", line 552, in _mssql.MSSQLConnection.__init__ , вы можете найти ее здесь, то TypeError: argument of type 'NoneType' is not iterable говорит нам, что сервер None   -  person Pedru    schedule 29.06.2016


Ответы (1)


Когда выполнение кода достигает

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

эта ошибка выдается, потому что значение сервера равно "Нет"

Вы уже установили значение для этого в

server = getenv("####")

но часто случается так, что getenv терпит неудачу и ничего не возвращает. Это зависит от системы/платформы (особенно для систем Windows).

Вы можете попробовать распечатать значения для сервера и пользователя

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

По моему опыту, они возвращают None, поэтому соединение не проходит. Поскольку ошибка не ясна, мы склонны считать, что проблема связана с подключением.

person Rahul    schedule 13.12.2017