2016-07-01 13 views
0

sqlalchemyデータベースがあり、更新クエリを実行する場合。 SELECTコマンドにも同じ方法を使用できると思っていました。PythonでSQLAlchemy SQLビルダーでUPDATEクエリを実行するには?

は、ここに私のコードです:

disk_engine = create_engine('sqlite:///test.db') 
chunksize = 20000 
j = 0 
index_start = 1 

for df in pd.read_csv('test.csv', chunksize=chunksize, 
         iterator=True, encoding='utf-8'): 
    df.index += index_start 
    j+=1 
    df.to_sql('data', disk_engine, if_exists='append') 
    index_start = df.index[-1] + 1 

... 

##NOW I WANT TO UPDATE A ROW 
ts = pd.read_sql_query('UPDATE data SET score = ROUND(score,1)', disk_engine); 

しかし、これはエラーをスローします:

result.pyc in _non_result(self, default) 918 if self._metadata is None: 919 raise exc.ResourceClosedError( --> 920 "This result object does not return rows. " 921 "It has been closed automatically.", 922 )

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

どのように私は正しく、データベースを更新することができますか?

+0

[SQLAlchemy:自動終了を防ぐ](http://stackoverflow.com/questions/14375666/sqlalchemy-prevent-automatic-closing) – shivsn

+0

これは私の質問にどのように答えますか? – user2212461

答えて

0

正確な文字列UPDATE data SET score = ROUND(score,1)を実行したい場合は、その接続をdisk_engineに実行する必要があります。例えば:/場合、私が言うことはできませんが

conn = disk_engine.connect() 
result = conn.execute('UPDATE data SET score = ROUND(score,1)') 

どのように更新ステートメントは、あなたのコード例に基づいて変更することになっているので、これはあなたが探しているものではないかもしれません。

関連する問題