0

私はいくつかのレガシーコードを継承しました。この時点で、それを機能させる必要があります-次のコードのみがあります:

import ODBC.Windows, os
DBconn = ODBC.Windows.connect("DRG3","sa","")
cursor = DBconn.cursor()

Python 2.7 インストールに pyODBC、pyWin32、および mxODBC を追加しましたが、まだ何も機能しません。これは mxODBC コードのようですが、インストール手順が曖昧で、現在は有料製品のようです (ただし、これが書かれた 2001 年頃にはそうではなかったようです)。インストール後も関連ファイルを Python27\Lib\site-packages\mx\mxODBC\ から Python27\Lib にコピーするまでは変化がなく、これに必要なファイルを繰り返し探して \Lib に追加しても、最後に「Windowsという名前のモジュールはありません」に到達します。

肝心なのは、先に進むことができるように、これを最小限の労力で接続したいということです。これまでpythonを使ったことがないので、助けていただければ幸いです。私は mxODBC を使用することにコミットしていませんが、何か他のものを使用している場合、コードを何に変更すればよいかを知る必要があります。

4

2 に答える 2

1

まず最初に、申し訳ありませんが、これは Python の紹介になります。どん底に放り込まれても面白くない。そうは言っても、参考になることを願っているいくつかの発言があります。

  1. 実行しようとしているプログラムは古いです。あなたは 2001 年について言及していたので (私の考えでは石器時代の人々のイメージを思い起こさせます)、これは Python 2.0 または 2.1 になります。現在、コア言語と標準ライブラリの後方互換性を維持することはメンテナーにとって最優先事項であるため、言語自体についてはあまり心配していませんが、アプリケーションが必要とする他のライブラリには当てはまらない可能性があります。API は 11 年で大幅に変更される可能性があり、一部のライブラリは完全に放棄される可能性があります (これはおそらく、より良い代替手段があることを意味しますが、それでもなお)。私がここで言っているのは、おそらくここでは我慢する必要があるということだけです.

  2. このプログラムが実際に mxODBC をデータベース コネクタとして使用している場合 (そして確かにそのように見えます)、独自の依存関係があることに注意してください。( Egenixサイトを参照してください)。ちなみに、私の知る限り、mxODBC は常に商用製品でしたが、正確なライセンスは変更されている可能性があります。

  3. また、インポートステートメントは次のように読むべきだと思います:

    import mx.ODBC.Windows, os
    

    つまり、connect ステートメントは次のようになります。

    mx.ODBC.Windows.connect("DRG3","sa","")
    
  4. \Lib ディレクトリ内で Python ファイルを移動すると、問題が発生する可能性があります。あなたはおそらくそれを元に戻したいと思うでしょう。

  5. また、接続先のデータソースについても少し心配です。それが本当に ODBC である場合、それを設定したり動作させるのに問題があるかもしれませんが、実行している Windows のフレーバーによって異なります。長い間、Microsoft は ODBC を廃止してきましたが、64 ビット Windows では、ここで問題が発生しました。最近、彼らはそれに戻ったように見えますが、これまでのところ、正確に何が起こったのかはわかりません.

  6. 何らかの理由で mxODBC が機能しない場合は、pyodbcを試してください。それが機能するには、適切な接続文字列を作成する必要がありますが、インターネット上には十分な数の例が浮かんでいます。

私は個人的にリストの最後のオプションを選びますが、それは、pyodbc でいくつかの良い経験があり、mxODBC での経験がまったくないからです。ことわざにあるように、走行距離は異なる場合があります。

于 2012-06-02T10:02:50.453 に答える
0

pyodbc でこれを試すことができます:

import pyodbc
DBconn = pyodbc.connect("DSN=DRG3;UID=sa;PWD=")
cursor = DBconn.cursor()
于 2012-06-02T10:10:43.653 に答える