Python SQL更新不会通过django pyodbc影响任何行

Python SQL更新不会通过django pyodbc影响任何行,python,sql-server,freetds,unixodbc,django-pyodbc,Python,Sql Server,Freetds,Unixodbc,Django Pyodbc,我已经为Python2.7(Ubuntu 14.04、unixODBC、FreeTDS)安装了django pyodbc,我正在尝试更新作为测试创建的SQL Server数据库 除了一个不影响任何行的特定UPDATE语句外,其他所有语句都运行良好。通过isql执行的相同查询影响258行(与从Windows运行查询的结果相同)。顺便说一句,一个简单的UPDATE语句可以工作(例如:UPDATE mytable SET x=1)。所讨论的查询基于2个联接(一个是左联接)。这是: UPDATE E S

我已经为Python2.7(Ubuntu 14.04、unixODBC、FreeTDS)安装了django pyodbc,我正在尝试更新作为测试创建的SQL Server数据库

除了一个不影响任何行的特定UPDATE语句外,其他所有语句都运行良好。通过isql执行的相同查询影响258行(与从Windows运行查询的结果相同)。顺便说一句,一个简单的UPDATE语句可以工作(例如:UPDATE mytable SET x=1)。所讨论的查询基于2个联接(一个是左联接)。这是:

UPDATE E
SET in_dico = 0
FROM entites_entite E
INNER JOIN entites_entitetype T 
      ON E.entite_type_id = T.id
LEFT JOIN entites_singleton S 
      ON LOWER(E.entite_name) = LOWER(S.entite_name)
WHERE E.entite_name NOT LIKE '% %' 
      AND T.exclude_singleton = 1 
      AND S.entite_name IS NULL
DATABASES = {
'default': {
   'ENGINE': "django_pyodbc",
   'HOST': "myservername,1433",
   'USER': "myname",
   'PASSWORD': "mypassword",
   'NAME': "mydbname",
   'OPTIONS': {
       'host_is_server': True,
       'autocommit': True,
       'driver': "FreeTDS"
       },
   'COMMAND_TIMEOUT': 7200,
}
有人知道这样的事情怎么可能发生吗? 当做 帕特里克

编辑:我的数据库设置已包含autocommit参数。无论如何,这是:

UPDATE E
SET in_dico = 0
FROM entites_entite E
INNER JOIN entites_entitetype T 
      ON E.entite_type_id = T.id
LEFT JOIN entites_singleton S 
      ON LOWER(E.entite_name) = LOWER(S.entite_name)
WHERE E.entite_name NOT LIKE '% %' 
      AND T.exclude_singleton = 1 
      AND S.entite_name IS NULL
DATABASES = {
'default': {
   'ENGINE': "django_pyodbc",
   'HOST': "myservername,1433",
   'USER': "myname",
   'PASSWORD': "mypassword",
   'NAME': "mydbname",
   'OPTIONS': {
       'host_is_server': True,
       'autocommit': True,
       'driver': "FreeTDS"
       },
   'COMMAND_TIMEOUT': 7200,
}

}

这当然是可能的,但我们需要一些表结构来理解您要做的事情。顺便说一句,这个查询对于大型数据集来说是一个问题,它不能很好地扩展。最大的问题是在join语句中使用LOWER函数。这意味着SQL将无法使用索引进行连接。本质上,查询将实体字典中没有空格的名称(我称之为“Singleton”的名称,例如John、Frank、Obama)设置为0(in_dico),但异常表(名为entites_Singleton的表,例如:Madonna、Bono、U2等)中包含的名称除外. 在这里,entite_类型的连接并不重要。关于联接的较低级别,您是对的,但我在进程开始时只运行了一次此任务,因此这不是什么大问题。您可以从settings.py中包括数据库部分吗?我认为您可能需要为“自动提交”添加一个选项:“true”,以便它在更新时正常工作。