unixODBC错误 IM001
我在尝试进行任何简单查询时遇到了以下错误。我就是搞不清楚到底发生了什么变化。
这里有一个使用sqlalchemy(Elixir)的类的例子:
class Song(Entity):
using_options(tablename='tbSongs', autoload=True)
using_table_options(schema='apra')
数据库连接没问题,类也能正常构建,因为我可以用 dir(Song)
查看所有正确的列。但是,简单的查询却无法执行。
这是对那个类的一个查询和得到的输出:
>>> songs = Song.query.all()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 1729, in all
return list(self)
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 1839, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 1854, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1399, in execute
params)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1532, in _execute_clauseelement
compiled_sql, distilled_params
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_context
context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1633, in _execute_context
context)
File "/usr/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 325, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.DBAPIError: (Error) ('IM001', '[IM001] [unixODBC][Driver Manager]Driver does not support this function (0) (SQLColAttribute)') 'SELECT [tbSongs_1].[ID_Song] AS [apra_tbSongs_ID_Song], [tbSongs_1].[Album] AS [apra_tbSongs_Album], [tbSongs_1].[Title] AS [apra_tbSongs_Title], [tbSongs_1].[Composer] AS [apra_tbSongs_Composer], [tbSongs_1].[Performer] AS [apra_tbSongs_Performer], [tbSongs_1].[TrackNumber] AS [apra_tbSongs_TrackNumber], [tbSongs_1].[Duration] AS [apra_tbSongs_Duration], [tbSongs_1].[RecordLabel] AS [apra_tbSongs_RecordLabel], [tbSongs_1].[Notes] AS [apra_tbSongs_Notes], [tbSongs_1].[Class] AS [apra_tbSongs_Class], [tbSongs_1].[SongID] AS [apra_tbSongs_SongID], [tbSongs_1].[Deleted] AS [apra_tbSongs_Deleted] \nFROM apra.[tbSongs] AS [tbSongs_1]' ()
>>>
设置详情:
- 32位的Arch Linux
- Python 2.7.2
- sqlalchemy 0.7.2
- elixir 0.7.1
- FreeTDS 0.82-5
- unixodbc 2.3.0-1
/etc/odbcinst.ini:
[ODBC Drivers]
tds = Installed
[tds]
Driver = /usr/lib/libtdsodbc.so
Setup = /usr/lib/libtdsodbc.so
/etc/odbc.ini:
[ODBC]
Trace = 0
[DBNAME]
Driver = TDS
Trace = No
Server = xx.xx.xx.xx\dbname
Database = dbname
Port = 1433
3 个回答
0
你能提供一下这个问题发生时的ODBC跟踪记录吗?我刚刚了解到这个问题,现在还无法重现它。所以如果你能把发生时的日志发给我,那将是一个很好的开始。
1
试着把预装的 FreeTDS、unixODBC 和 pyodbc 删除掉。用版本 0.91、2.3.0 和 2.1.9 从源代码重新编译对我来说是有效的,但这个过程可能会有点复杂。我在最近的 SQLAlchemy 讨论组里详细讲解过这个,大家可以去看看:http://groups.google.com/group/sqlalchemy/browse_thread/thread/971e068032d51dd5
1
我也遇到了这个错误,降级到unixODBC 2.2.12就解决了这个问题(注意,我无法用2.2.14版本来构建PyOBDC,只能用2.2.12)。我对unix上ODBC工具的新版本状态感到相当困扰(Freetds 0.91也有很多问题)。