8

この Python コードはデータベースでステートメントを実行する必要がありますが、SQL ステートメントは実行されません。

from sqlalchemy import *
sql_file = open("test.sql","r")
sql_query = sql_file.read()
sql_file.close()
engine = create_engine(
    'postgresql+psycopg2://user:password@localhost/test', echo=False)

conn = engine.connect()
print sql_query
result = conn.execute(sql_query)
conn.close()

このtest.sqlファイルには、89 個のテーブルを作成する SQL ステートメントが含まれています。

89 個のテーブルを指定するとテーブルは作成されませんが、テーブルの数を 2 に減らすと機能します。

conn.execute 内で実行できるクエリの数に制限はありますか? このような生のクエリをいくつでも実行するにはどうすればよいでしょうか?

4

2 に答える 2

8

おそらく、自動コミットを強制します:

conn.execute(RAW_SQL).execution_options(autocommit=True))

他のアプローチは、トランザクションを使用してコミットを行うことです:

t = conn.begin()
try:
    conn.execute(RAW_SQL)
    t.commit()
except:
    t.rollback()

PD: create_engine パラメーターにも execution_options を入れることができます。

于 2012-06-27T09:30:32.647 に答える
-1

SQLAlchemy で raw SQL を使用するのはなぜですか? 正当な理由がない場合は、他の方法を使用する必要があります。

http://docs.sqlalchemy.org/en/rel_0_7/orm/tutorial.html

http://docs.sqlalchemy.org/en/rel_0_7/core/schema.html#metadata-describing

于 2012-06-27T10:18:17.713 に答える