問題タブ [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 投票する
1 に答える
1561 参照

python - プロンプトにpyodbc.connectを取得するには?

私の C++ プログラムでは、不足しているパスワードを要求したり、独自の接続を選択させたりする接続プロセスに慣れています。pyodbc.connect() を使用すると、代わりに例外が生成されます。

接続文字列の pyodbc ドキュメントには、pyodbc が C 関数SQLDriverConnectを呼び出すと記載されています。プロンプトの動作は DriverCompletion パラメーターによって制御されますが、Python からそのパラメーターを設定する方法がわかりません。

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

python - pyodbc を使用した Python のマルチプロセッシングとデータベース アクセスは「安全ではありません」?

問題:

次のトレースバックが表示されますが、その意味や修正方法がわかりません。

状況:

処理するデータでいっぱいの SQL Server データベースがあります。multiprocessing モジュールを使用して作業を並列化し、コンピューターの複数のコアを利用しようとしています。私の一般的なクラス構造は次のとおりです。

  • MyManagerClass
    • これは、プログラムが開始されるメイン クラスです。
    • 2 つの multiprocessing.Queue オブジェクトを 1 つと 1 つ作成しますwork_queuewrite_queue
    • また、他のプロセスを作成して起動し、それらが終了するのを待ちます。
    • 注: これはmultiprocessing.managers.BaseManager() の拡張ではありません
  • MyReaderClass
    • このクラスは、SQL Server データベースからデータを読み取ります。
    • にアイテムを入れますwork_queue
  • MyWorkerClass
    • ここで作業処理が行われます。
    • からアイテムを取得し、work_queue完成したアイテムを に入れwrite_queueます。
  • MyWriterClass
    • このクラスは、処理されたデータを SQL Server データベースに書き戻す役割を担います。
    • からアイテムを取得しますwrite_queue

アイデアは、1 人のマネージャ、1 人のリーダー、1 人のライター、および多数のワーカーが存在するというものです。

その他の詳細:

私は stderr で 2 回トレースバックを取得するので、リーダーに対して 1 回、ライターに対して 1 回発生すると考えています。ワーカー プロセスは正常に作成されますが、KeyboardInterrupt を送信するまでそのまま待機しwork_queueます。

リーダーとライターの両方が、初期化時に作成されたデータベースへの独自の接続を持っています。

解決:

このソリューションにつながった回答と質問について、Mark と Ferdinand Beyer に感謝します。彼らは、Cursor オブジェクトが "pickle-able" ではないことを正しく指摘しました。これは、マルチプロセッシングがプロセス間で情報を渡すために使用する方法です。

私のコードの問題は、MyReaderClass(multiprocessing.Process)両方がメソッドMyWriterClass(multiprocessing.Process)でデータベースに接続されていることでした。__init__()これらの両方のオブジェクトを で作成し (つまり、init メソッドと呼びます) MyManagerClass、次に を呼び出しstart()ました。

したがって、接続オブジェクトとカーソル オブジェクトを作成し、それらを pickle 経由で子プロセスに送信しようとします。私の解決策は、接続オブジェクトとカーソル オブジェクトのインスタンス化を、子プロセスが完全に作成されるまで呼び出されない run() メソッドに移動することでした。

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

ms-access - MS Access への odbc 接続による MaxLocksPerFile の回避

「私の手に負えない状況」tmのため、MS Access バックエンドで sqlalchemy を使用しています。次のコードに問題があります。

「ファイル共有ロック数を超えました」をスローします。大きなテーブルでのエラー。生成されるステートメントは次のとおりです。

uid のパラメーターを使用します。その後、ステートメントは pyodbc を介して実行されます。MSDN はこの問題を回避するためのいくつかの提案を提供しましたが、データベースが Novell NetWare サーバー上にある場合は機能しないと通知されました。

私が使用できる既知の回避策はありますか (できれば sqlalchemy レイヤーで)、または一度に上位 9,000 レコードを選択して削除し、終了するまでループする醜いハックを作成する必要がありますか?

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

python - PYODBC を介した SQL クエリは、あるマシンではサイレントに失敗し、別のマシンでは機能します

XML ファイルからのデータの解析と複数のデータベースへの保存を自動化するプログラムに取り組んでいます。(具体的には、USGS リアルタイム水質サービス、興味のある方はhttp://waterservices.usgs.gov/rest/WaterML-Interim-REST-Service.htmlを参照) LXML と PYODBC を使用して Python 2.5.1 で記述されています。データベースは Microsoft Access 2000 にあります。

接続関数は次のとおりです:
def get_AccessConnection(db):
connString = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + db
cnxn = pyodbc.connect(connString, autocommit=False)
cursor = cnxn. cursor()
return cnxn, cursor
ここで、db はデータベースへのファイルパスです。

プログラムは次のことを行います。 a)
データベースへの接続を開きます
b) そのデータベースの 2 ~ 8 個の XML ファイルを解析し、それらの値を一連のレコードに構築してデータベースに挿入します (ユーザー定義の辞書構造ではなく、ネストされた辞書構造を使用します)。 type)
c) 一連のレコードをループし、cursor.execute() - 各レコードに対して SQL クエリを実行します
d) データベース接続をコミットして閉じます

cursor.execute() 呼び出しでエラーがスローされると、トレースバックとクエリがログ ファイルに書き込まれ、次に進みます。

私の同僚が自分のマシンでそれを実行すると、ある特定のデータベースに対して、特定のレコードが存在せず、エラーが記録されません。マシンからまったく同じネットワーク パスを介してデータベースのまったく同じコピーに対してまったく同じコードを実行すると、存在するはずのすべてのデータが存在します。

同僚と私は、Microsoft Access 2000 と同じバージョンの Python、lxml、および pyodbc がインストールされた Windows XP コンピュータを使用しています。Microsoft ODBC ドライバーのバージョンが同じかどうかを確認する方法がわかりません。そこにある記録とそうでない記録の間に違いを見つけることができませんでした。私は、同じ問題が他のデータベースで発生するかどうか、および 3 人目の同僚のコンピューターでも発生するかどうかをテスト中です。

私が本当に知りたいのは、私には意味が分からないので、誰もがこれを引き起こすと考えることができるものです. 要約すると、SQL クエリを実行する Python コードは、あるコンピューターではその半分を黙って失敗し、別のコンピューターでは完全に動作します。

編集:
もう問題ありません。同僚にもう一度実行してもらいましたが、データベースは完全に更新され、レコードの欠落はありませんでした。そもそもなぜ失敗したのか、また起こるのかどうかはまだわかりませんが、「問題は解決しました」.

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

sql - pyodbc を使用して行を MS Access MDB に挿入します。パラメータをエスケープするにはどうすればよいですか?

従来の Access 2000 .mdb ファイルと対話するために pyodbc を使用しています。

カーソルがあり、これを実行しようとしています:

ただし、そうすることで、

疑問符をリテラル値に変更するだけでよいことは理解していますが、私の経験では、データベース間で文字列を適切にエスケープすることは...きれいではありません。

PHP と mysql はチームを組んmysql_real_escape_stringで友達を連れてきますが、値をエスケープするための pyodbc の関数を見つけることができないようです。

このデータを(Pythonから)挿入するための推奨される方法を教えていただければ、非常に役に立ちます。あるいは、odbc 文字列をエスケープするための Python 関数があれば、それも素晴らしいでしょう。

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

jdbc - JDBCドライバーでODBCアプリケーションを使用する

私の会社はVerticaを使用しています。pyodbcで接続するPythonアプリケーションがあります。私はほとんどの開発をMac(Snow Leopard)で行っていますが、残念ながらVerticaはMac用のODBCドライバーをリリースしていません。ただし、JDBCドライバーはあります。Jythonでの開発は良い妥協点ではないと思います。ODBCアプリケーションでJDBCドライバーを使用する方法はありますか?ある種のODBCコネクタ?

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

sql-server - Linux での Django-pyodbc SQL Server/freetds サーバー接続の問題

エラー: ('IM002', '[IM002] [unixODBC][ドライバー マネージャー] データ ソース名が見つからず、既定のドライバーが指定されていません (0) (SQLDriverConnectW)')

Windows 開発マシンでの開発から本番環境の Linux マシンに移行していますが、freetds ドライバーに問題があります。私が知る限り、エラーメッセージはドライバーが見つからないことを意味します。sqsh と tsql を介して cli 経由で接続できます。そのようにsettings.pyをセットアップしました。

djangoでSQL Serverの経験がある人はいますか? DNS を使用する必要がありますか? (どのようにフォーマットしますか?)

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

python - SQL Serverのpyodbc-挿入を実行して行IDを取得するにはどうすればよいですか?

SQLServer2000でpyodbcを使用しています。

行を挿入して、自動インクリメントされた行ID値を取り戻すことができるようにしたいですか?何か案は?

これが私がこれまでに持っているものです:

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

python - Python-Linux-Windowsクレデンシャルを使用したMSSQLへの接続-FreeTDS+UnixODBC+pyodbcまたはpymssql

これを設定するための優れた手順はないようです。誰か良い指示がありますか?私はLinuxの初心者なので、優しくしてください。私は似たような 別の投稿を見ましたが、本当の答えはありません。

私にはいくつか問題があります。

  1. FreeTDSは機能しているようには見えません。接続しようとすると、「tsql」コマンドを使用して次のメッセージが表示されます。「デフォルトのデータベースがdatabaseNameに設定されています。サーバーへの接続に問題がありました」が、問題の内容が記載されていません。

    1. pyodbcを使用して接続しようとすると、次のエラーが発生します。 "pyodbc.Error:( '08S01'、'[08S01] [unixODBC] [FreeTDS] [SQL Server]接続できません:Adaptive Serverが使用できないか、存在しません( 20009)(SQLDriverConnectW)') "

    2. pymssqlで似たようなことを試しましたが、似たような問題が発生しました。接続できないエラーが発生し続けますが、理由がわかりません。

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

python - pyodbc を使用して Unicode 文字列をエンコードし、SAS データセットに保存するにはどうすればよいですか?

pyodbcSAS ODBC ドライバーを使用して、Python を使用して SAS データセットの読み取りと書き込みを行っています。データを完全にロードできますが、データを保存するときは、次のようなものを使用します。

...pyodbc.Error: ('HY004', '[HY004] [Microsoft][ODBC Driver Manager] SQL data type out of range (0) (SQLBindParameter)')エラーが発生します。

問題は、私がユニコード文字列を渡しているという事実にあるようです。これを処理するために何をする必要がありますか?