@CompileState.plugin_for("orm", "insert")
class ORMInsert(ORMDMLState, InsertDMLState):
- pass
+ @classmethod
+ def orm_pre_session_exec(
+ cls,
+ session,
+ statement,
+ params,
+ execution_options,
+ bind_arguments,
+ is_reentrant_invoke,
+ ):
+ return (
+ statement,
+ util.immutabledict(execution_options),
+ )
+
+ @classmethod
+ def orm_setup_cursor_result(
+ cls,
+ session,
+ statement,
+ params,
+ execution_options,
+ bind_arguments,
+ result,
+ ):
+ return result
@CompileState.plugin_for("orm", "update")
import pickle
import sqlalchemy as sa
+from sqlalchemy import delete
from sqlalchemy import event
from sqlalchemy import ForeignKey
+from sqlalchemy import insert
from sqlalchemy import inspect
from sqlalchemy import Integer
from sqlalchemy import select
from sqlalchemy import String
from sqlalchemy import testing
from sqlalchemy import text
+from sqlalchemy import update
from sqlalchemy.orm import attributes
from sqlalchemy.orm import backref
from sqlalchemy.orm import close_all_sessions
):
result.all()
+ @testing.combinations("insert", "update", "delete", argnames="dml_expr")
+ @testing.combinations("core", "orm", argnames="coreorm")
+ def test_dml_execute(self, dml_expr, coreorm):
+ User = self.classes.User
+ users = self.tables.users
+
+ sess = fixture_session()
+
+ if coreorm == "orm":
+ if dml_expr == "insert":
+ stmt = insert(User).values(id=12, name="some user")
+ elif dml_expr == "update":
+ stmt = update(User).values(name="sone name").filter_by(id=15)
+ else:
+ stmt = delete(User).filter_by(id=15)
+ else:
+ if dml_expr == "insert":
+ stmt = insert(users).values(id=12, name="some user")
+ elif dml_expr == "update":
+ stmt = update(users).values(name="sone name").filter_by(id=15)
+ else:
+ stmt = delete(users).filter_by(id=15)
+
+ result = sess.execute(stmt)
+ result.close()
+
@testing.combinations((True,), (False,), argnames="prebuffered")
@testing.combinations(("close",), ("expunge_all",), argnames="meth")
def test_unbuffered_result_before_session_is_closed(