私はこのような挿入ステートメントを持っています:
insert = MyTable.insert()
row = {"foo": 42}
result = cxn.execute(insert, row)
ただし、Postgresトリガーは挿入を新しいテーブルにリダイレクトしmytable
ているため、insertステートメントは実際には何も返しません。
# INSERT INTO mytable VALUES (DEFAULT, 'stuff') RETURNING LASTVAL();
lastval
---------
(0 rows)
これにより、SQLAlchemy(0.8b2)は。を発生させTypeError: 'NoneType' is not subscriptable
ます。これはDefaultExecutionContext
、挿入された行の主キーをフェッチしようとしたときに発生しているようです。
これは報告すべきバグですか?そして、SQLAlchemyに戻り値を期待しないように指示して、これを回避する方法はありますか?
トレースバック
… snip…
File "myfile.py", line 85, in store
result = cxn.execute(insert, row)
File ".../sqlalchemy/engine/base.py", line 664, in execute
params)
File ".../sqlalchemy/engine/base.py", line 764, in _execute_clauseelement
compiled_sql, distilled_params
File ".../sqlalchemy/engine/base.py", line 899, in _execute_context
context._fetch_implicit_returning(result)
File ".../sqlalchemy/engine/default.py", line 697, in _fetch_implicit_returning
ipk.append(row[c])
TypeError: 'NoneType' object is not subscriptable
Postgresトリガー
CREATE OR REPLACE FUNCTION mytable_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO mytable_cur VALUES (NEW.*);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER mytable_insert_trigger
BEFORE INSERT ON mytable
FOR EACH ROW EXECUTE PROCEDURE mytable_insert_trigger();