【问题标题】:SQLAlchemy and adodbapi Database connection errorSQLAlchemy 和 adodbapi 数据库连接错误
【发布时间】:2012-07-24 02:29:07
【问题描述】:

我正在尝试在 IronPython 2.7.3 上使用 sqlalchemy 0.7.8 和 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中的东西。

有人有什么想法吗?

【问题讨论】:

  • 你能上传你的查询代码吗?
  • 要让它失败,你需要做的就是调用engine.connect(),它甚至在它到达数据库之前就失败了
  • 你为什么不试试pyodbc而不是adodapi?

标签: sqlalchemy ironpython adodbapi


【解决方案1】:

我们有一个解决方法:

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

【讨论】:

    【解决方案2】:

    很确定 adodbapi 不适用于 SQLAlchemy。

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

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

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

    【讨论】:

    【解决方案3】:

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

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

    或者您可以查看编写连接字符串here 的不同方式。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 2018-02-14
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多