首页 > 解决方案 > 直接执行自定义SQL不起作用但没有报错

问题描述

我有一个函数views.py可以直接在数据库中执行 sql 查询,就像这样

cursor.execute("INSERT INTO table1(field1,field2,field3) VALUES(%s,%s,%s)",[value1,value2,value3])
cursor.execute("UPDATE table1 SET field1=%s,field2=%s,field3=%s WHERE field4=%s",[value1,value2,value3,value4])

问题是当函数运行不显示错误并且在调试模式下返回"POST /something/20/ HTTP/1.1" 200但在数据库中未保存数据时。我使用 django 1.8.19、django-pyodbc-azure 1.8.17 并且数据库在 sql server 2016 上。非常感谢任何帮助。

标签: djangosql-server-2016django-pyodbc

解决方案


如果您使用 Django 进行连接,如下所示:

from django.db import connection
cursor = connection.cursor()

然后通常,自动提交应该是打开的。但值得测试:在你的两个cursor.execute()语句之后,你可以放一个cursor.close()andprint("CURSOR CLOSED!")吗?

然后查看数据是否已插入,是否print()runserver.

如果autocommit没有打开,您可以在您的DATABASES选项中激活它。它在django-pyodbc-azure此处作为一个选项记录在案:

https://pypi.org/project/django-pyodbc-azure/

祝你好运!


推荐阅读