我正在尝试使用sqlalchemy 0.7.8和IronPython 2.7.3上的adodapi 2.4.2.2连接到mssql SQLExpress 2012数据库
我能够创建一个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中的东西。
任何想法?
答案 0 :(得分: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()
这样我的会话对象可以正常工作。
我可能没有按照制作它的人的意图使用adodbapi方言,但我找不到任何文档,所以这就是我现在所用的。
答案 1 :(得分:0)
非常确定adodbapi不适用于SQLAlchemy。
The adodbapi dialect is not implemented for 0.6 at this time.
滚动到最底部(这是0.7x文档),我还检查了0.8文档并且说了同样的事情。
听起来你必须改变你正在使用的驱动程序。
答案 2 :(得分:0)