問題タブ [pyodbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2553 参照

python - 代替の unixODBC インストールの使用

私は組織全体の中央にマウントされたドライブに unixODBC がインストールされている環境で作業していますが、私たち (実際の開発者) はそこにドライバーやデータソースをインストールすることを許可されていません。それはすべて後ろ向きですが、私はそれと一緒に暮らす必要があります。

現在、この UNIX 環境から mssql 2005 サーバーに接続する python アプリを構築しようとしているので、明らかに SQL ドライバーが必要です!

完全に制御できるドライブの一部に unixODBC を再インストールすることで、プリインストールされた unixODBC にアクセスできないことを回避しました。freeTDS をインストールし、すべてを構成して、isql を使用してサーバーに正常に接続できるようにしました。

唯一の問題は、python プログラム (pyodbc を使用している) で次のような行を実行するときです。

私は得る

これは、pyodbc がまだ元の unixODBC インストールを探しており、ローカルの unixODBC インストールを探しているためだと思います。だから私は疑問に思っていました:

メイン ドライブにインストールされているものではなく、ローカルの unixODBC インストールを検索するようにスクリプトを構成するにはどうすればよいですか

0 投票する
2 に答える
945 参照

python - PYODBC を使用して MSSQL の VarBinary(MAX) に BitTorrent ビットフィールドを挿入する

私は BitTorrent を含むプロジェクトに取り組んでおり、ビットフィールドを Python 文字列として受け取ります。例えば:

ビットフィールド = "000001110100111000110101100010"

Python 文字列をフォーマットに変換して、PYODBC を使用して MSSQL データベースの varbinary(max) 列にそのまま挿入できるようにしたいと考えています。そのまま文字列として挿入しようとすると、もちろん不正な変換エラーになります。

注 PYODBC は、ドキュメントによると、varbinary フィールドの入力としてバイト配列またはバッファーを想定しています。

任意の提案をいただければ幸いです。

0 投票する
0 に答える
2133 参照

python - Ubuntu 11.10 で Python と unixODBC を使用して MS Access JET 4 データベース (.mdb) を読み取る: 不正な値を取得する

Ubuntu 11.10 32 ビットで Python 2.7.2 (unixODBC 2.2.14、pyodbc 2.1.11、および mdbtools ドライバー) を使用して Microsoft Access データベース (JET 4 .mdb) を読み込もうとすると、問題が発生します。はい、私はそれが恐ろしい考えであることを知っていますが、奇妙なことに、それは私が見つけることができる最も簡単な解決策です. さまざまな理由で .mdb データベースを別の形式 (sqlite など) に変換することは避けたいのですが、これが理解できない場合は、これが唯一の解決策のようです。この質問が長くなってしまったことをお詫び申し上げます。また、Linux および odbc/database の取り扱いについても初心者です。私はこれを理解しようと 3 日間費やしましたが、最後の 2 日間はどこにも行きませんでした。

問題: データベースを読み取ることはできますが、値が正しくエンコード/フォーマットされていません。

Python コード:

出力:

行:

次のようにする必要があります。

私が考え、理解しようとしているのは、列情報の読み取り時 (SQLDescribeCol.c) および/またはデータのフェッチ時 (SQLFetch.c および SQLGetData.c) にエラーがあるということです。

たとえば、列 1 と 2 を見てみましょう。列 1 はタイム スタンプであり、そのように正しく識別されます (SQL_TYPE_TIMESTAMP)。また、正しい値をバッファに読み込みます (Buffer = [03/14/03 15:40:00]) が、結果の出力が 8 文字の長さ '03 であるため、8 である Column Size/StrLen Or Ind によってショートされているようです/14/03」、サイズ 8 はバイト (?) を指すと思っていましたが。

列 2 は整数値 1 ですが、バッファでは 49 として読み取られます。理由はわかりませんが、すべての整数値を ASCII コード/数字 (1 は 49、2 は 50 など) として読み取るため、かなり不便です。また、数値が大きくなった場合 (たとえば、1728 が 942815025 になる) に対処する方法がわかりません。double の数値もバッファーで正しく読み取られません。

ログの SQLDescribeCol、列 1 および 2 (以下にリンクされている完全なログ ファイルと同じ):

ログ列 1 および 2 からの SQLGetData:

これらは、mdbtools によって提供されるテーブル abd の列です。

完全な ODBC ログ ファイル: http://pastebin.com/Q01ahwCW

これを解決する方法について誰かがヒントを持っている場合 (簡単なデータベース変換を含む) は、非常に頻繁に変換する必要があるため、非常に高く評価されます! さらに情報が必要な場合は、提供できます。

ありがとう!

0 投票する
1 に答える
1334 参照

python - pyodbcを使用してPythonでExcelからpostgresにデータをインポートする

を使用して、 MS-ExcelからPostgreSQLにデータをインポートしています。python(2.6)pyodbc

直面している問題は次のとおりです。

left single quotation mark(ANSI hex code : 0x91)エクセルソースには、などの文字があります。これで、pyodbcを使用してPostgreSQLにインポートすると、終了してエラーが発生しますDatabaseError: invalid byte sequence for encoding "UTF8": 0x91

試したこと:decode('unicode_escape')とりあえず使ってみました。ただし、これは単に関係する文字を削除/エスケープするため、これを行うことはできません。

別の試用版:最初にデコードし、どこでもUnicodeをデコードし、後で必要に応じてデータベースからエンコードします。また、手元のプロジェクトが拡大しているため、これを行うことはできません。

タスクを実行するためのいくつかのメソッド/手順/組み込み関数を提案してください。

0 投票する
1 に答える
967 参照

python - pyodbc を使用して「GRANT SELECT ON」ステートメントを実行する方法

私は何百もの msaccess データベースを扱っています。データベース、テーブル、およびその他のオブジェクトの概要を作成しようとしています。特定のデータベース内のすべてのテーブルとオブジェクトを見つけるには、次のクエリを使用します

ただし、pyodbc エラー メッセージが表示されます

すべての msaccess データベースのアクセス許可をプログラムで変更するにはどうすればよいですか。「GRANT SELECT ON」ステートメントを使用しようとしましたが、エラー メッセージが表示されました

私が使用した接続文字列はこの形式です

助けてくれてどうもありがとう。

0 投票する
2 に答える
3048 参照

sqlalchemy - sqlalchemyは、tg2とpyodbcを使用してDataError 22001をスローし、SQLServer2005に書き込みます。

反映されたsqlalchemyマップクラスをSQLServerテーブルに使用しています。別のソースから取得したデータを含むActivitiesクラス(マップされたクラス)のDBSession.add()インスタンス。次に、transaction.commit()を呼び出しました(tg2から呼び出しているため、session.commit()を使用できません)

エラートレースバック:

ここからこれを続行/デバッグする方法がわからないので、これについての助けを喜んでください

編集:これはユニコードと関係があるのではないかと疑われたので、sqlalchemy列をユニコードに変更しました。

DataErrorが何らかの理由でスタックしていて、ロールバックを呼び出す必要があるかもしれませんが、tg2のトランザクションでロールバックを呼び出すのがホットかどうかはわかりません

編集:mssqlのEVENTCODE列は:datatype:PK、nvarchar(6)であり、nullではありませんこれが役立つことを願っています

別の編集:挿入コード(関連部分)

0 投票する
4 に答える
345 参照

python - 次の結果をどのように解決できますか?

私はスクリプトを作成してSQLから選択し、値を返します。スクリプトは「コード=コード+ 1」メソッドと連携して選択の条件を作成します。

しかし、条件が存在しない場合もあります。どうすれば処理できますか?

実際のスクリプト部分は次のとおりです。

ただし、値が返されない場合は、次のエラーが出力されます

TypeError: 'NoneType' オブジェクトは添字可能ではありません

0 投票する
1 に答える
1569 参照

python - cursor.execute select コマンドを使用して pyodbc で日付を返す

pyodbc を使用して、Oracle データベースから特定の基準に一致する日付を返そうとしています。たとえば、2010 年 1 月 1 日から 2011 年 1 月 1 日までのすべての日付を取得したいとします。これを行うには、次のようにします。

x = cursor.execute("""OutputDate > '2010/01/01' および OutputDate < '2011/01/01' であるテーブルから列を選択"""

Access データベースを使用していたときに同様のことが機能しましたが、次のエラーが表示されます。

pyodbc.DataError: ('22007', '[22007] [Microsoft][Oracle 用 ODBC ドライバー][Oracle]ORA-01861: リテラルがフォーマット文字列と一致しません (1861) (SQLExecDirectW)')

私は Windows 7 を使用しており、使用しているドライバーは Microsoft ODBC for Oracle です (エラーから明らかだと思います)。

「リテラルがフォーマット文字列と一致しません」というのは、このデータベースでは日付に < と > を使用できないということですか? 誰でも私を助けることができますか?

どうもありがとう、アレックス

0 投票する
3 に答える
4983 参照

sql-server-2008 - Debian Linux の pyodbc/FreeTDS/unixODBC: TDS バージョンの問題

Debian Lenny (5.0.7) で pyodbc を正常に使用するのに少し問題があります。具体的には、NVARCHAR 値の取得に問題があるようです (SQL Server の専門家ではないので、気楽にやってください :))。

ほとんどの従来のクエリは正常に機能します。たとえば、table1 の行数は次のようになります。

ID の完全なダンプと同様に

しかし、名前のダンプ (これも NVARCHAR 型) はそうではありません。

...重大なエラーは

pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server] Unicode のみの照合の Unicode データまたは ntext データは、DB-Library (ISQL など) または ODBC バージョン 3.7 または(4004) (SQLExecDirectW)')

これはテーブル間で一貫しています。

それぞれのさまざまなバージョンを試してみましたが、現在は unixODBC 2.2.11 (lenny repos から)、FreeTDS 0.91 (ソースからビルド./configure --enable-msdblib --with-tdsver=8.0)、および pyodbc 3.0.3 (ソースからビルド) を実行しています。

同様の組み合わせ (unixODBC 2.3.0、FreeTDS 0.91、pyodbc 3.0.3) を使用すると、同じコードが Mac OS X 10.7.2 で動作します。

ここここで提示された解決策を調査し、さまざまなバージョンの unixODBC と FreeTDS を再コンパイルしましたが、ダイスはありませんでした。以下に示す関連構成ファイル:

アドバイスや指示をいただければ幸いです。

0 投票する
2 に答える
4194 参照

python - Python 2.6 を OSI PI に接続するにはどうすればよいですか?

pyodbcデータベース接続の管理に使用しています。OSI PI データベースに接続しようとすると、次のエラーが表示されます。

pyodbc.Error: ('IM002', "[IM002] [OSI][PI ODBC][PI]PI-API Error <pilg_getdefserverinfo> 0 (0) (SQLDriverConnectW); [01000] [Microsoft][ODBC Driver Manager] The driver doesn't support the version of ODBC behavior that the application requested (see SQLSetEnvAttr). (0)")

ベンダーと話し合ったところ、次のような回答がありました。 Looks like pyodbc is written against ODBC 3.x. The OSI PI ODBC driver is using ODBC 2.0. The python ODBC driver manager will convert most ODBC 3 calls on the fly to ODBC 2 ones. Anything added to 3, however, will obviously fail. You would need to find some way to make sure that your only using 2.0 compliant ODBC calls. Currently their is not a PI ODBC driver that is compliant with ODBC 3.0.

この時点で接続を試みているだけなので、私のコードはかなり単純です。

Python を OSI PI に接続した人はいますか? もしそうなら、どのようにしましたか?そうではなく、OSI データベースのデータをまだ使用している場合、どのようにしてアクセスしたのでしょうか?