10

1 年以上前に、誰かがこの質問をしました: Python で SQL Management Studio で実行するために使用される .sql ファイルを実行します

SQL サーバーに接続し、大規模な (数 GB) .sql ファイル内の SQL コマンドに基づいてデータベースを作成および設定するスクリプトを Python で作成しています。

SQLCMD には、SQL Server Express のダウンロードとインストールが必要なようです。私のスクリプトを使用するすべての人が SQL Server をダウンロードしてインストールする必要なく、Python から .sql ファイルを実行する他の方法はありますか? pyodbc にはこの機能がありますか?

編集:

これは別の同様の質問です: python MySQLdb で *.sql ファイルを実行します

ここでも、解決策は、コマンド (この場合は mysql.exe) から、リストされたファイルを引数としてユーティリティを呼び出すことです。

Python の DB API ライブラリの 1 つを使用してこれを行う方法があるはずですが、見つからないので、ファイルの実行に使用できる SQLCMD や MYSQL などの *.exe を探しています。コマンドラインから。

PSこれを正しく見ていない場合は、お気軽に修正してください。おそらく、以下のコードはコマンドラインから実行するのと同じくらい効率的です:

for line in open('query.sql','r'):
    cursor.execute(line)
4

3 に答える 3

16

実際には、Python でファイルを読み取り、pyodbc を使用してバッチで実行する方が、SQLCMD ユーティリティを外部で使用するよりも高速であることがわかりました (スクリプトを実行するすべてのコンピューターに SQLCMD をインストールする必要はありません!)。

これが私が使用したコードです(pyodbcにはメソッドがないように見えるためexecutescript()):

with open(scriptPath, 'r') as inp:
    for line in inp:
        if line == 'GO\n':
            c.execute(sqlQuery)
            sqlQuery = ''
        elif 'PRINT' in line:
            disp = line.split("'")[1]
            print(disp, '\r')
        else:
            sqlQuery = sqlQuery + line
inp.close()
于 2012-05-09T16:36:45.897 に答える
0

SQLCMD およびその他の管理ユーティリティは、無料でダウンロードできます。これらは、Microsoft が「SQL Server の機能パック」と呼んでいるものの一部です。

大規模な一括インポートを実行したいとのご連絡をいただきました。これを行うには、BCP ユーティリティをチェックアウトすることをお勧めします。ダウンロードhttp://www.microsoft.com/en-us/download/details.aspx?id=16978

SQL を使用して、BULK INSERT を実行することもできます。このコマンドは、ファイルから SQL データベースにデータを挿入できます。

もう 1 つの方法は、もちろん、純粋な ETL ジョブに SQL Server Integration Services を使用することです。

于 2012-04-30T20:17:19.310 に答える
0

これがあなたの求めているものかどうかはわかりませんが、Python から直接 MS SQL を使用してみませんか? それを可能にする pymssql のようなライブラリがあります。または、ODBC を使用できます。

Python MS SQL ドライバーのリストについては、http://wiki.python.org/moin/SQL%20Serverを参照してください。

于 2012-04-30T19:26:59.990 に答える