Ошибка подключения к базе данных SQLAlchemy и adodbapi

Я пытаюсь подключиться к базе данных mssql SQLExpress 2012, используя sqlalchemy 0.7.8 и adodapi 2.4.2.2 на IronPython 2.7.3

Я могу создать механизм sqlalchemy, однако при выполнении запроса я получаю: «TypeError: объект 'NoneType' не подлежит подписке»

Проследить:

Traceback (most recent call last):
  File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 878, in __init__
  File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2558, in raw_connection
  File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\pool.py", line 183, in unique_connection
  File "<string>", line 9, in <module>
  File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLAlchemy-0.7.8-py2.7.egg\sqlalchemy\engine\base.py", line 2472, in connect
TypeError: 'NoneType' object is unsubscriptable

Используемый код:

def conn():
    return adodbapi.connect('Provider=SQLOLEDB; Data Source=SERVER\SQLEXPRESS; 
                             Initial Catalog=db; User ID=user; Password=pass;')
engine = create_engine('mssql+adodbapi:///', creator=conn, 
                        echo = True, module=adodbapi)

adodbapi, кажется, работает нормально сам по себе, т.е. я могу создать соединение, а затем использовать курсор для запроса без каких-либо проблем, похоже, что-то в sqlalchemy.

У кого-нибудь есть идеи?


person Sigma    schedule 25.07.2012    source источник
comment
не могли бы вы также загрузить свой код запроса?   -  person Jacob George    schedule 26.07.2012
comment
Чтобы заставить его выйти из строя, все, что вам нужно сделать, это вызвать engine.connect (), он терпит неудачу еще до того, как попадет в базу данных.   -  person Sigma    schedule 26.07.2012
comment
почему бы вам не попробовать pyodbc вместо adodapi?   -  person Jacob George    schedule 26.07.2012


Ответы (3)


И у нас есть обходной путь:

import adodbapi
from sqlalchemy.engine import create_engine
from sqlalchemy.orm import sessionmaker
import sqlalchemy.pool as pool

def connect():
    return adodbapi.connect('Provider=SQLOLEDB.1;Data Source=mypcname\SQLEXPRESS;\
                         Initial Catalog=dbname;User ID=user; Password=pass;')

mypool = pool.QueuePool(connect)
conn = mypool.connect()
curs = conn.cursor()
curs.execute('select 1') #anything that forces open the connection

engine = create_engine('mssql+adodbapi://', module=adodbapi, pool = mypool)

Session = sessionmaker()
Session.configure(bind=engine)
sess = Session()

С этим мой объект сеанса работает как обычно.

Я, вероятно, не использую диалект адодбапи, как задумано кем бы то ни было, но я не могу найти никакой документации, так что это то, что я использовал на данный момент.

person Sigma    schedule 26.07.2012

Я уверен, что adodbapi не работает с SQLAlchemy.

Диалект адодбапи в настоящее время не реализован для версии 0.6.

Прокрутите до самого низа (это документация 0.7x), я также проверил документацию 0.8, и там написано то же самое.

Похоже, вам придется сменить драйвер, который вы используете.

person Tony Gibbs    schedule 25.07.2012
comment
Согласно docs.sqlalchemy.org/en/rel_0_7/core/ он поддерживается, и в них реализован диалект. Мне придется самому заняться отладкой, поддержка sqlalchemy есть, но, похоже, предварительная. - person Sigma; 26.07.2012

Я использую sqlalcmy для подключения к базе данных postgresql с помощью файла psycopg2. Я не уверен, но, читая документацию, я думаю, вам нужно загрузить pyodbc, вроде поддерживается лучше, чем adodbapi. После того, как вы его установили, попробуйте выполнить следующую инструкцию, чтобы создать движок

engine = create_engine(mssql+pyodbc://user:pass@host/db)

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

person Jacob George    schedule 26.07.2012
comment
pyodbc, к сожалению, не работает на IronPython, с которым я застрял из-за необычной природы приложения. - person Sigma; 26.07.2012
comment
Ты прав. Судя по всему, pyodbc не работает с IronPython. Возможно, эти ссылки должны помочь вам stackoverflow.com/questions/2998558/ stackoverflow .com / questions / 455469 / ironpython-db-api-2-0. - person Jacob George; 27.07.2012