4

使用: Python 2.7.3 SQLAlchemy 0.7.8 PyODBC 3.0.3

PyODBC を基礎となる db ドライバーとして使用して、EXASolution DB に独自の Dialect を実装しました。列を整数/倍長output_converterに変換するには、PyODBC の関数を利用する必要があります。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):

コードが呼び出され、例外はスローされませんが、これは 1 回限りの初期化です。その後、他の接続が作成されます。これらの接続は、初期化コードを介して渡されません。

接続の初期化がSQLAlchemyでどのように機能するか、および作成された新しい接続ごとに呼び出されるようにコードをどこに配置するかについて、誰かがヒントを持っていますか?

4

1 に答える 1