使用:Python2.7.3 SQLAlchemy 0.7.8 PyODBC 3.0.3
我为EXASolution DB实现了自己的方言,使用PyODBC作为底层db驱动程序。我需要使用PyODBC的output_converter函数将DECIMAL(x, 0)列转换为整数/长。
下面的代码片段完成了这个任务:
pyodbc = self.dbapi
dbapi_con = connection.connection
dbapi_version = dbapi_con.getinfo(pyodbc.SQL_DRIVER_VER)
(major, minor, patch) = [int(x) for x in dbapi_version]
if major >= 3:
dbapi_con.add_output_converter(pyodbc.SQL_DECIMAL, self.decimal2int)的initialize(self, connection)方法中放置了这个代码段
class EXADialect_pyodbc(PyODBCConnector, EXADialect):调用代码,不会抛出任何异常,但这是一次性初始化。稍后,将创建其他连接。这些连接不会通过我的初始化代码传递。
有没有人对SQLAlchemy的连接初始化有什么提示,以及在哪里放置我的代码,以便为创建的每个新连接调用它?
发布于 2021-12-28 19:36:01
这是个老掉牙的问题,但我最近碰到了一些问题,所以一个最新的答案可能会帮助其他人。在我的例子中,我试图自动减少mssql UNIQUEIDENTIFIER列(guids)。
您可以通过会话或引擎获取原始连接(pyodbc)以完成以下操作:
engine = create_engine(connection_string)
make_session = sessionmaker(engine)
...
session = make_session()
session.connection().connection.add_output_converter(SQL_DECIMAL, decimal2int)
# or
connection = engine.connect().connection
connection.add_output_converter(SQL_DECIMAL, decimal2int)https://stackoverflow.com/questions/11671170
复制相似问题