我的数据库模块中有这个(匿名)函数:
def fix_publishing_dates(row_id, last_time=None, next_time=None,
    next_index=1, user="python_script"):
  sql = """
  UPDATE
    schema.table
  SET
    last_time = :last_time
  , next_time = :next_time
  , next_index = :next_index
  , col4 = SYSDATE
  , col5 = :user_id
  , is_active = 1
  WHERE
    id = :row_id
  """
  with closing(Session()) as s:
    with s.begin_nested():
      user_id = get_userid_by_name(user)
      args = dict(
          last_time=last_time,
          next_time=next_time,
          next_index=next_index,
          row_id=row_id,
          user_id=user_id,
          )
      s.execute(sql, args)
      s.flush()
    s.commit()
由于某种原因,这不起作用。我在上表中查询 is_active=1,得到零行。我在这里做明显错误的事情吗?
笔记
我不想使用 SQLAlchemy ORM 并为此添加大量样板表类*;我只是喜欢使用带有文本查询的 Session() 来支持事务。
*:也不会因为内省而减慢我的启动时间;到这个数据库的网络管道很慢。
编辑 1
- 我正在通过 cx_oracle 使用 Oracle 11 数据库。
 - 万一这很重要,绑定值之一有时是 None/
 此代码(以不同方式匿名)也不起作用:
def fix_publishing_dates(**kwargs): sql = insert_query_here user_id = get_userid_by_name(user) args = dict(kwargs) print "*" * 50 print "* About to update database with values: {}".format(args) print "*" * 50 result = engine.execute(sql, args) print "Row count is:", result.rowcount #import ipdb;ipdb.set_trace() #s.commit()