首先是试着用ironpython 跑sqlalchemy
1. 第一个问题是出在__solt__对于python私有变量的解释
python对私有变量约定用__开头,实际中,它被存储为_ClassName__variablename ,ironpython 在__solt__中说明时需要用实际存储的变量名
修改pool.py 中的
class _ConnectionFairy(object):
"""Proxies a DB-API connection and provides return-on-dereference support."""
__slots__ = '_pool', '_ConnectionFairy__counter', 'connection', '_connection_record', '__weakref__', '_detached_info'
同样的问题还在_CursorFairy类中
class _CursorFairy(object):
__slots__ = '_CursorFairy__parent', 'cursor', 'execute'
2. echo=True启用log时出现
ValueError: _getframe is not implemented for non-zero depth
用echo=False逃过
3.autoload=True时出现Key errors
不使用autoload
在接下来的测试中出现了不少错误,如
select([categories.c.id,categories.c.name,func.count(products.c.id)],from_obj=[categories.join(products)]).group_by(categories.c.id,categories.c.name)
这个func.count 通不过,提示key error ,这个错误出现的概率还是停多的
然后试着用jython 跑sqlalchemy ,使用了http://fwierzbicki.blogspot.com/2007/07/sqlalchemy-mysql-and-jython.html 这里的实现,修改了logging/util.Set两个地方
但显然,生成的sql 有问题,像上面的 from 部分 是 from core_category ,core_product ,core_category inner join core_product
接着继续折腾zxJDBC ,这个是python的jdbc 的 dbapi实现,试了ms的sql server jdbc驱动,在select * from core_category 就出错,经查看是nvarchar的输出问题,如果单独使用jdbc ,这个问题是不存在