SQLAlchemy和adodbapi数据库连接错误

SQLAlchemy和adodbapi数据库连接错误,sqlalchemy,ironpython,adodbapi,Sqlalchemy,Ironpython,Adodbapi,我正在尝试使用IronPython 2.7.3上的sqlalchemy 0.7.8和adodapi 2.4.2.2连接到mssql SQLExpress 2012数据库 我能够创建一个sqlalchemy引擎,但是当进行查询时,我得到: “TypeError:'非类型'对象不可订阅” 回溯: Traceback (most recent call last): File "C:\Program Files (x86)\IronPython 2.7\Lib\site-packages\SQLA

我正在尝试使用IronPython 2.7.3上的sqlalchemy 0.7.8和adodapi 2.4.2.2连接到mssql SQLExpress 2012数据库

我能够创建一个sqlalchemy引擎,但是当进行查询时,我得到: “TypeError:'非类型'对象不可订阅”

回溯:

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
adodbapi本身似乎工作得很好,也就是说,我可以创建一个连接,然后使用游标进行查询,没有任何问题,这似乎是sqlalchemy中的一个东西


有人有什么想法吗?

非常确定adodbapi不能与SQLAlchemy一起工作

滚动到最底部,(这是0.7x文档),我也检查了0.8文档,它说了同样的事情


听起来您必须更改正在使用的驱动程序。

我使用sqlalcmy通过psycopg2连接到postgresql数据库。我不确定,但通过阅读文档,我认为您需要下载,它似乎比adodbapi更受支持。安装后,请尝试以下语句来创建引擎

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

或者,您可以检查编写连接字符串的不同方式

我们有一个解决办法:

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方言,但我找不到任何文档,所以这就是我现在使用的。

根据它的支持,他们实现了一种方言。我必须亲自调试它,sqlalchemy支持在那里,但似乎是初步的。你能不能也上传查询代码?要让它失败,你需要做的就是调用引擎。connect(),它甚至在到达数据库之前就失败了。为什么不试着用pyodbc代替Adodpi?不幸的是pyodbc在IronPython上不起作用,由于应用程序的特殊性,我一直坚持使用它。你是对的。显然,pyodbc不适用于IronPython。也许这些链接应该对你有所帮助
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()