5

各クエリが複数行にまたがる一連の SQL クエリを含む .sql ファイルがあります。を使用して、Python 経由で MySQL でこれらのクエリを実行したいと考えていますMySQLdb

sqlite3には、この目的のために と呼ばれる「非標準のショートカット」executescript()がありますが、 には同等の機能がないようですMySQLdb

2年前から同じことを尋ねるこの古い質問に気づきましたが、答えが不十分であることがわかりました. 答えは基本的に次のとおりです。

subprocessコマンドを実行しmysql、.sql ファイルに送信するために使用します。

これは機能しますが、かなり洗練されておらず、エラー処理などで望ましくない複雑さが生じます。

各クエリが 1 行にある場合は、各行を個別に実行してください。

しかし、私の場合、それらは複数の行にまたがるので、これは機能しません。

各クエリが 1 行に収まらない場合は、何らかの方法で結合します。

しかし、どうやって?つまり、私は何かを簡単にハッキングできるので、ここで中途半端な回答で返信する必要はありません。おそらくそれが私がやることになるでしょうが、これを行う確立されたライブラリはすでにありますか? ハックするよりも、包括的で正しい解決策の方が快適だと思います。

4

1 に答える 1

3

MySQLdbこれをすぐに使用できるように思われcursor.nextset()ます。返された結果セットを循環するために呼び出す必要があります。

db = conn.cursor()
db.execute('SELECT 1; SELECT 2;')

more = True
while more:
    print db.fetchall()
    more = db.nextset()

このサポートが有効になっていることを確実に確認したい場合、および/またはサポートを無効にしたい場合は、次のようなものを使用できます。

MYSQL_OPTION_MULTI_STATEMENTS_ON = 0
MYSQL_OPTION_MULTI_STATEMENTS_OFF = 1

conn.set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_ON)
# Multiple statement execution here...
conn.set_server_option(MYSQL_OPTION_MULTI_STATEMENTS_OFF)
于 2012-06-12T02:33:52.387 に答える