3

私は立ち往生しています-私は、他のいくつかの目的で非常にうまく使用してきたSQL錬金術を備えた次のpythonスクリプトを持っています。

import sqlalchemy
from sqlalchemy import MetaData
from sqlalchemy.orm import *

engine = sqlalchemy.create_engine("this line of code would provide credentials to the     database")
connection = engine.connect()
session = sessionmaker(bind=engine)
result = connection.execute(sqlquery)

for row in result: print row

最近、「sqlquery」に @Declare MyTable ステートメントが含まれていると、エラーが発生することがわかりました。

"This result object does not return rows. "
sqlalchemy.exc.ResourceClosedError: This result object does not return rows. It has been closed automatically.

SSMS で正常に動作するが、SQLAlchemy を使用して実行しようとすると実行されない SQL クエリを次に示します。

DECLARE @USER TABLE
(
    UserID INT
    , StatsVals INT
)

INSERT INTO @USER (UserID, StatsVals)
    SELECT TOP 10 u.UserID
    , u.StatsVals
    FROM UserProfile u

SELECT * FROM @USER

SQLAlchemy がこのエラーを表示する理由を知っている人はいますか? これを修正するにはどうすればよいですか?

4

2 に答える 2

4

DBAPI がカーソル上で実行されるとき、結果が存在する場合、存在するcursor.description必要がある属性が呼び出されます。そうでない場合、SQLAlchemy は返す結果がないことを認識します。

この場合、この使用法がカーソルの「複数の結果セット」の領域に該当しない限り、これはおそらく DBAPI に問題があります。SQLAlchemy は、まだ複数の結果セットを直接サポートしていません。この場合、DBAPI カーソルを直接使用して呼び出し.nextset()、結果を取得する必要があります。これは次の方法で取得できます。

connection = engine.raw_connection()
cursor = connection.cursor()

(cursor.nextset() の仕組みに関するドキュメントはhttp://www.python.org/dev/peps/pep-0249/にあります)

それ以外の場合は、DBAPI の作成者に連絡して、ここで行っていることが本当に可能かどうかを確認する必要があります。使用しているバックエンドを指定していませんが、これは pyodbc だと思います。その場合は、 http://code.google.com/p/pyodbc/ から連絡できます。

于 2012-02-14T02:12:53.103 に答える