Question

I'm attempting to connect to a mssql SQLExpress 2012 database using sqlalchemy 0.7.8 and adodapi 2.4.2.2 on IronPython 2.7.3

I am able to create a sqlalchemy engine, however when a query is made I get : "TypeError: 'NoneType' object is unsubscriptable"

TraceBack:

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

Code being used:

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 seems to work fine on it's own, ie. i can create a connection and then use a cursor to query without any problems, it seems to be something in sqlalchemy.

Anyone any ideas?

Was it helpful?

Solution

And we have a workaround:

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()

With this my session object works as normal.

I'm probably not using the adodbapi dialect as intended by whoever made it, but I can't find any documentation, so this is what I've gone with for now.

OTHER TIPS

Pretty sure adodbapi doesn't work with SQLAlchemy.

The adodbapi dialect is not implemented for 0.6 at this time.

Scroll to the very bottom, (this is 0.7x documentation), I also checked 0.8 documentation and it says the same thing.

Sounds like you'll have to change which driver you're using.

I use sqlalcmy to connect to a postgresql database using the psycopg2. I am not sure, but by reading the documentation, i think you need to download the pyodbc, it seems to be better supported than adodbapi. Once you have installed it, try the following statement to create the engine

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

Or you can check out different ways of writing the connection string here.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top