Python sqlalchemy ORM无法加载数据[属性的延迟加载程序未能正确填充]

Python sqlalchemy ORM无法加载数据[属性的延迟加载程序未能正确填充],python,sql-server,sqlalchemy,Python,Sql Server,Sqlalchemy,我在一个专有的MSSQL数据库中有一个表 from sqlalchemy import Column, Integer, Sequence from sqlalchemy.dialects.mssql import TINYINT, NCHAR from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class MyTable(Base): __tablename__ = 'm

我在一个专有的MSSQL数据库中有一个表

from sqlalchemy import Column, Integer, Sequence
from sqlalchemy.dialects.mssql import TINYINT, NCHAR
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'my_table'
    ID = Column(Integer, Sequence('my_table_ID_seq'), primary_key=True)
    MyDescription = Column(NCHAR(20), nullable=False)
    other_data = Column(TINYINT, nullable=False)
    another_ID = Column(Integer, nullable=False)
我可以创建一个引擎并运行一个查询,没有问题

from sqlalchemy import create_engine

connection_string = "mssql+pymssql://..."
engine = create_engine(connection_string, echo=False)
result = engine.execute("SELECT MyDescription FROM my_table")
for row in result:
    print row[0]
这将产生预期的输出,但如果我尝试通过会话进行查询,则无法访问MyDescription字段

from sqlalchemy.orm import sessionmaker
session = sessionmaker(bind=engine)()

session.query(MyTable).first().MyDescription
然后我收到了一条令人讨厌的信息(在本例中来自ipython),关于这一点,互联网几乎没有提及

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-4-9a0ce6f4e942> in <module>()
----> 1 session.query(MyTable).first().MyDescription

c:\Python27\lib\site-packages\sqlalchemy-0.8.0b2-py2.7-win32.egg\sqlalchemy\orm\attributes.pyc in __get__(self, instance, owner)
    249             return dict_[self.key]
    250         else:
--> 251             return self.impl.get(instance_state(instance), dict_)
    252 
    253 

c:\Python27\lib\site-packages\sqlalchemy-0.8.0b2-py2.7-win32.egg\sqlalchemy\orm\attributes.pyc in get(self, state, dict_, passive)
    557                                 "Deferred loader for attribute "
    558                                 "%r failed to populate "
--> 559                                 "correctly" % key)
    560                 elif value is not ATTR_EMPTY:
    561                     return self.set_committed_value(state, dict_, value)

KeyError: "Deferred loader for attribute 'MyDescription' failed to populate correctly"
---------------------------------------------------------------------------
KeyError回溯(最近一次呼叫最后一次)
在()
---->1 session.query(MyTable).first().MyDescription
c:\Python27\lib\site packages\sqlalchemy-0.8.0b2-py2.7-win32.egg\sqlalchemy\orm\attributes.pyc in\uuuuuuu get\uuuuuu(self、instance、owner)
249返回指令[self.key]
250其他:
-->251返回self.impl.get(实例\u状态(实例),dict\u)
252
253
get中的c:\Python27\lib\site packages\sqlalchemy-0.8.0b2-py2.7-win32.egg\sqlalchemy\orm\attributes.pyc(self、state、dict、passive)
557“属性的延迟加载程序”
558“%r”无法填充
-->559“正确的”%key)
560 elif值不是属性为空:
561返回self.set\u committed\u值(state、dict\u、value)
KeyError:“属性“MyDescription”的延迟加载程序未能正确填充”

这一点(见第584行)相当模糊,但确实表明缺乏测试覆盖率。这里会发生什么事?

我刚想出来。我正在使用pymssql驱动程序。将此更改为pyodbc可以解决问题

connection_string = "mssql+pyodbc://..."

知道为什么吗?

我尝试升级到0.9,但产生了相同的错误。